浏览器到服务器的跨域问题
前端小伙伴是否有遇到联调期间,遇到跨域的问题,不能访问通接口的情况?
这里就涉及到了跨域,一般本地起的代码均为localhost开头的域名,
方案有三个:jsonp,cors,window.postMessage,document.domain + iframe
这里 我经常使用到的是cors,CORS 标准定义了在访问跨域资源时,浏览器与服务器应该如何沟通。CORS 的基本思想是使用 HTTP 头部让浏览器与服务器进行沟通,从而决定请求是否能够成功。
XHR 的一个主要限制是同源策略,即通信只能在相同域名、相同端口和相同协议的前提下完成。访问超出这些限制之外的资源会导致安全错误,除非使用了正式的跨域方案。这个方案叫作跨源资源共享(CORS,Cross-Origin Resource Sharing),XHR 对象原生支持 CORS。图片探测和 JSONP 是另外两种
跨域通信技术,但没有 CORS 可靠。
服务器会根据请求的Origin字段去判断是否可以被该链接访问,如果设置Access-Control-Allow-Origin 的值为该域名,则可以访问。
请求报文:
GET /resources/public-data/ HTTP/1.1 Host: bar.other User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Referer: http://foo.example/examples/access-control/simpleXSInvocation.html Origin: http://foo.example
响应报文:
HTTP/1.1 200 OK Date: Mon, 01 Dec 2008 00:23:53 GMT Server: Apache/2.0.61 Access-Control-Allow-Origin: * Keep-Alive: timeout=2, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: application/xml [XML Data]
Access-Control-Allow-Origin: * 表明该资源可以被任意外域访问