JavaScript的跨域请求
[TOC]
神马是跨域请求
因为浏览器的同源策略,默认情况下,JavaScript在发送AJAX请求时,URL的域名必须和当前页面完全一致。
也就是说,请求ajax的url,域名要相同(www.example.com
和example.com
不同),协议要相同(http
和https
不同),端口号要相同(默认是:80
端口,它和:8080
就不同)。
解决方法
通过在同源域名下架设一个代理服务器来转发,JavaScript负责把请求发送到代理服务器。然后让代理服务器帮助我们完成请求。
通过JSONP,它有个限制,只能用GET请求,并且要求返回JavaScript。这种方式跨域实际上是利用了浏览器允许跨域引用JavaScript资源:
通过CORS进行跨域请求。
cros是提出的新的跨域策略:
Origin表示本域,也就是浏览器当前页面的域。当JavaScript向外域(如sina.com)发起请求后,浏览器收到响应后,首先检查
Access-Control-Allow-Origin
是否包含本域(或者*),如果是,则此次跨域请求成功,如果不是,则请求失败,JavaScript将无法获取到响应的任何数据。可见,跨域能否成功,取决于对方服务器是否愿意给你设置一个正确的
Access-Control-Allow-Origin
,决定权始终在对方手中。