浏览器到服务器的跨域问题

前端小伙伴是否有遇到联调期间,遇到跨域的问题,不能访问通接口的情况?

这里就涉及到了跨域,一般本地起的代码均为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: * 表明该资源可以被任意外域访问

posted @ 2021-03-26 14:50  阿兰儿  阅读(162)  评论(0编辑  收藏  举报