CORS
Posted bleachcurtain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CORS相关的知识,希望对你有一定的参考价值。
CORS
它允许浏览器向垮源服务器发出XMLHttpRequest请求.
CORS需要浏览器和服务器都支持
只要满足下面的两类就属于简单请求:
1:请求方法是HEAD, GET, POST三种方法之一
2:HTTP的头信息不超过下面的字段
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
不属于简单请求的就是非简单请求。
CORS 实现思路
CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。
跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies和 HTTP 认证相关数据)。
CORS请求失败会产生错误,但是为了安全,在javascript代码层面是无法获知到底具体是哪里出了问题。你只能查看浏览器的控制台以得知具体是哪里出现了错误。
服务器端处理机制
服务器对于跨域请求的处理流程如下:
首先查看http头部有无origin字段;如果没有,或者不允许,当成普通请求;
如果有且是允许的,再看是否是preflight(method=OPTIONS);
如果不是preflight(简单请求),返回Allow-Origin,Allow-Credential等字段,并返回正常内容;
如果是preflight(非简单请求),返回Allow-Headers,Allow-Methods等;
参考链接:
https://blog.csdn.net/lishanleilixin/article/details/79931298
以上是关于CORS的主要内容,如果未能解决你的问题,请参考以下文章