一、产生原因:
浏览器为安全性考虑实施的同源策略,限制了跨域访问,也就是不允许跨域请求资源。当a页面想获取b页面资源时,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的。
二、解决方法:
1、跨域资源共享CORS
浏览器将所有请求分为两类,一类是简单请求,一类是非简单请求;以下是满足简单请求的条件:
<1>HTTP请求方式为GET、POST或HEAD
<2>请求头信息:
Accept
Accept-Language
Content-Language
Content-Type
对应的值是以下三个中的任意一个
application/x-www-form-urlencoded 、multipart/form-data 、text/plain
同时满足以上两个条件时,则是简单请求,否则为复杂请求;
简单请求时,浏览器会直接发起一个跨域请求,并在请求头中携带上Origin(或者*,表示允许任何域名的请求),用来说明本次请求来自哪个源。服务器端接受到请求后,根据头信息来判断是否允许跨域,返回一个正常的HTTP响应(如果允许,则响应头携带Access-Control-Allow-Origin等字段,并返回正常内容)。浏览器根据返回的响应头是否携带Access-Control-Allow-Origin等字段判断请求是否请求成功,没有则抛出异常。
如果是非简单请求,先发送一个预请求,该请求以OPTIONS方法发起,预请求会对服务器进行检测,以获取服务器是否