共计 619 个字符,预计需要花费 2 分钟才能阅读完成。
首先,跨域是因为浏览器的“同源策略”问题,跟服务器没有关系。
因为“同源策略”,不同源之间的站点:
- 无法访问对方存储在浏览器中的数据,比方
localStorage
,IndexedDB
,Cookie
- DOM 无奈取得
- AJAX 申请不能发送
不同源站点的通信能够通过以下办法:
- 通过设置雷同的
document.domain
能够共享cookie
,也能够用于父子窗口获取彼此Dom
- 通过
window.onhashchange
共享 hash 值,仅限于父子窗口(内嵌 iframe) - 通过
postmessage
至于 AJAX 申请,浏览器先会查看申请门路与以后页面是否同源,同源间接发送,不同源就要先 hold 住,在申请的 header
外面加个 Origin
属性,发一个【预检申请】,服务器收到该申请后,依据本身的配置返回后果
Access-Control-Allow-Origin
: 容许跨域的域名列表Access-Control-Allow-Methods
:容许逾越的申请形式Access-Control-Allow-Headers
: 容许跨域的Header
列表Access-Control-Expose-Headers
:容许裸露给JavaScript
代码的Header
列表Access-Control-Max-Age
:最大的浏览器缓存工夫,单位为s
浏览器依据返回数据判断,符合条件则发送正式申请,不合乎就回绝发送申请。
这也就是 CORS
,不过CORS
在【简略申请】时,不会发送预检申请
正文完
发表至: javascript
2021-03-11