同源策略是什么?
如果两个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文件的内容
缺点:
-
JSONP没有认证,后端改了之后所有人都可以访问这个数据 要解决这个问题要在JSONP加上token,CSRF token
-
JSONP只能发get请求,不支持POST