浅谈同源策略和跨域

109 阅读2分钟

同源策略是什么?

如果两个URL的协议、端口和域名都完全一致的话,则这两个URL是同源的

http://www.baidu.com/s
http://www.baidu.com/ssdadsda
以上两个url同源

同源策略怎么做:

只要在浏览器里打开页面,就默认遵守同源策略

优点:

保证用户的隐私安全和数据安全。

缺点:

很多时候,前端需要访问另一个域名的后端接口,会被浏览器阻止其获取响应。比如甲站点通过AJAX访问乙站点的/money查询余额接口,请求会发出,但是响应会被浏览器屏蔽。

怎么解决缺点:

使用跨域手段:

1. JSONP

a. 甲站点利用script标签可以跨域的特性,向乙站点发送get请求。 b. 乙站点后端改造JS文件的内容,将数据传进回调函数。 c. 甲站点通过回调函数拿到乙站点的数据。

2. CORS(跨域名资源分享方案)

a. 对于简单请求,乙站点在响应头里加Access-Control-Allow-Origin:http://甲站点 即可

b. 对于复杂请求,如PATCH(POST发送JSON数据也属于复杂请求),乙站点需要:

i. 响应OPTIONS请求,在响应中添加如下的响应头

```
    Access-Control-Allow-Origin: https://甲站点
    Access-Control-Allow-Methods:POST, GET, OPTIONS, PATCH
    Access-Control-Allow-Headers: Content-Type
    ```
    

ii. 响应POST请求,在响应中添加Access-Control-Allow-Origin头。

c. 如果需要附带身份信息,JS中需要在AJAX里设置xhr.withCredentials = true

JSONP有什么优缺点:

优点:

改动较小,只需要后端改一下JS文件的内容

缺点:

  1. JSONP没有认证,后端改了之后所有人都可以访问这个数据 要解决这个问题要在JSONP加上token,CSRF token

  2. JSONP只能发get请求,不支持POST