首先,跨域是因为浏览器的“同源策略”问题,跟服务器没有关系。
因为“同源策略”,不同源之间的站点:
- 无法访问对方存储在浏览器中的数据,比如
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
在【简单请求】时,不会发送预检请求
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。