Skip to content

JSONP_跨域 #38

Open
Open
@hungeraibin

Description

@hungeraibin
Owner

1.什么是同源策略(same-origin policy)

概述

浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。

本域指的是?

  • 同协议:如都是http或者https
  • 同域名:如都是aibin.com/a 和aibin.com/b
  • 同端口:如都是80端口

需要注意的是: 对于当前页面来说页面存放的 JS 文件的域不重要,重要的是加载该 JS 页面所在什么域

目的

为了保证用户信息的安全,防止恶意的网站窃取数据

限制范围

  1. Cookie、LocalStorage 和 IndexDB 无法读取。
  2. DOM 无法获得。
  3. AJAX 请求不能发送。

2.什么是跨域?跨域有几种实现形式

跨域含义

允许不同域的接口进行交互

实现方式:

  • JSONP
  • CORS
  • 降域
  • postMessage

3.JSONP 的原理是什么

JSONP含义

首先jsonp不是json数据,JSON是一种数据格式,而JSONP是一种数据调用方式,是解决JSON跨域获取的解决方案。因此JSONP(JSON with Padding)其实是一个非官方的协议。

JSONP原理

网页通过添加一个<script>元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。

JSONP实现

  1. 定义数据处理函数_fun
  2. 创建script标签,src的地址执行后端接口,最后加个参数callback=_fun
  3. 服务端在收到请求后,解析参数,计算返还数据,输出 fun(data) 字符串。
  4. fun(data)会放到script标签做为js执行。此时会调用fun函数,将data做为参数。

4.CORS是什么

CORS含义

CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。

CORS实现

  1. 当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理
  2. 如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin;
  3. 浏览器判断该相应头中是否包含 Origin 的值
  • 如果有则浏览器会处理响应,我们就可以拿到响应数据,
  • 如果不包含浏览器直接驳回,这时我们无法拿到响应数据。

所以 CORS 的表象是让你觉得它与同源的 ajax 请求没啥区别,代码完全一样。

5.根据视频里的讲解演示三种以上跨域的解决方式 ,写成博客

博客链接

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @hungeraibin

        Issue actions

          JSONP_跨域 · Issue #38 · hungeraibin/blog