同源策略
要理解跨域,就要了解“同源策略”。所谓同源是指,协议,域名,端口号相同。所谓“同源策略“,简单来说就是基于安全考虑,当前域不允许调用其他域的内容。
跨域
注意:localhost
和 127.0.0.1
虽然都指向本机,但也属于跨域。
解决方法
-
JSONP
<img>
的src
(获取图片),<link>
的href
(获取 css),<script>
的src
(获取 javascript)这三个都不符合同源策略,它们可以跨域获取数据。JSONP 就是利用<script>
的src
来实现跨域获取数据的。注意 JSONP 只支持GET
请求,不支持POST
请求。 -
代理
例如www.beijing.com/index.html
需要调用www.shanghai.com/server.php
,可以写一个接口www.beijing.com/server.php
,由这个接口在后端去调用www.shanghai.com/server.php
并拿到返回值,然后再返回给 index.html,这就是一个代理的模式。相当于绕过了浏览器端,自然就不存在跨域问题。 -
XHR2
在服务器端做一些小小的改造即可:
header('Access-Control-Allow-Origin:*'); //允许所有来源访问
header('Access-Control-Allow-Method:POST,GET'); //允许访问的方式 -
WebSocket
WebSocket 是一种通信协议,使用ws://
(非加密)和wss://
(加密)作为协议前缀。该协议不实行同源政策,只要服务器支持,就可以通过它进行跨源通信。 -
CORS
CORS 是跨源资源分享(Cross-Origin Resource Sharing)的缩写。它是 W3C 标准,跨源 AJAX 请求的根本解决方法。相比 JSONP 只能发GET
请求,CORS 允许任何类型的请求。
参考链接:
网友评论