[TOC]
跨域到实现机制
xhr的跨域
xhr中的跨域,通过CROS策略:服务器返回 Access-Control-Allow-Origin 来实现。
fetch的跨域
fetch的跨域,有多种形式,具体体现在 mode 属性的设置上
- same-origin,不允许跨域,否则会返回error,对应response type 为 basic
- cors,支持跨域,和xhr的CORS形式一样,对应response type 为 cors
- no-cors,用于跨域但是服务器不带CORS响应头,是fetch特殊的跨域请求方式,对应response type 为 opaque
对于no-cors的方式,浏览器虽然可以发送跨域的请求,但是不能访问响应的内容。 opaque - 不透明,大概就是对js调用方不可见的意思。
cookie的发送
xhr
需要同时满足
- 服务器指定 Access-Control-Allow-Credentials: true
开发者需要在AJAX请求中打开 withCredentials 属性
fetch
credentials属性
omit,默认值,忽略cookie发送
- same-origin,cookie只能同域发送
- include,即可同域,也可以跨域发送
脚本的crossorigin
识别错误信息
script标签的onerror中只反馈了很少的内容。要想识别具体的错误信息需要做到两点:
- script标签添加 crossorigin 属性,代表我希望服务器满足CORS策略时看到详细错误
- 服务端支持 Access-Control-Allow-Origin 允许被跨域访问到
可用的属性值
crossorigin
- 不写这个属性,代表no-cors,cookie发送策略为omit
- 值为’’ 或者 ‘anonymous’,代表cors,cookie发送策略为same-origin(参考fetch)
- 值为’use-credentials’,代表cors,cookie发送策略为same-origin(参考fetch)
注:对于使用第三方脚本,当然是只希望对方支持CORS,同时不发送本站cookie给它。
如何进行设置
- 在