跨域问题
JS处于安全考虑使用了同源策略
Under the policy, a web browser permits scripts contained in a first web page to access data in a second web page, but only if both web pages have the same origin. An origin is defined as a combination of URI scheme, hostname, and port number.
就是说,使用同源策略的时候若一个页面请求另外一个页面的数据,就要保证这两个页面同源。同源的标准是同一协议,同一域名,同一端口
跨域方式
JSONP
在JS中,标签中包含src属性的都是可以跨域的。所以可以通过动态生成<script>
标签进行跨域请求。
方式如下
但是JSONP**只支持GET请求以及Javascript的返回类型。**
CORS
文章:http://www.ruanyifeng.com/blog/2016/04/cors.html
原理就是浏览器在发送请求时会添加一个Origin头部,用来说明本次请求来自哪个源(协议 + 域名 + 端口)。
若服务端允许该请求,就会发送一个Access-Control-Allow-Origin,用于指示来自允许来自哪个域名的请求。
CORS跨域都是浏览器自动添加头部信息的,基本不要写上什么特定的信息。
COR分简单请求和非简单请求
简单请求
可以看到简单请求只能是GET、POST、HEAD且不能有自定义的头部信息。
非简单请求
非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为”预检”请求(preflight)。
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。