首先,跨域是因为浏览器的“同源策略”问题,跟服务器没有关系。
因为“同源策略”,不同源之间的站点:
- 无法访问对方存储在浏览器中的数据,比方
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
在【简略申请】时,不会发送预检申请