cors跨域请求

说明

协议(http,https等),域名,端口任何一个不同,浏览器请求将会发生跨域请求。
跨域资源共享(cors)允许web应用服务器进行跨域访问控制。从而使跨域数据传输得以安全进行。cors需要客户端和服务器同时支持,目前所有的浏览器都支持该机制。
跨资源共享标准新增了一组http首部字段,允许服务器声明那些源站有权限访问哪些资源。对那些可能对服务器数据产生副作用的的http请求方法(特别是GET以外的http请求),浏览器必须使用OPTIONS方法发起一个预检请求(preflight request),从而获知服务器是否允许该跨域请求。
服务器确认允许之后,才发起实际的http请求。

简单请求

某些请求不会触发 CORS 预检请求。本文称这样的请求为“简单请求”。
同时满足一下所有条件可视为简单请求。

1.使用如下方法:HTTP,HEAD,POST
2.content-type属于以下几种:application/x-www-form-urlencoded,multipart/form-data,text/plain

跨域请求服务器返回Access-Control-Allow-Origin: *,表明Origin(请求来源)所指定的任何域名都可以访问,如果写某几个,则除了所写的以外都不可以访问。

非简单请求

  • 预检请求
    当满足以下任何一个条件时,使用 OPTIONS方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。

1.使用了以下任何一个http方法:PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH
2.人为设置了对 CORS 安全的首部字段集合之外的其他首部字段。即不属于以下集合的,该集合为:Accept,Accept-Language,Content-Language,Content-Type ,DPR,Downlink,Save-Data,Viewport-Width,Width.
3.content-type不属于以下几种:application/x-www-form-urlencoded,multipart/form-data,text/plain

HTTP 请求首部字段

如预检请求中,在OPTIONS头中有

Origin:

它不包含任何路径信息,只是服务器名称。

Access-Control-Request-Method: POST
Access-Control-Request-Headers: Sid

向服务器说明请求使用POST方法,且有自定义的头Sid。

HTTP 响应首部字段

Access-Control-Allow-Origin: *

服务器返回Access-Control-Allow-Origin允许来自任意域名的请求

Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Sid, Content-Type

服务器返回Access-Control-Allow-Origin允许来自任意域名的请求。允许的方法和允许携带的header。

Access-Control-Expose-Headers: X-Another-Custom-Header

首部字段指定了服务端允许的首部字段集合。

Access-Control-Max-Age:

首部字段指明了预检请求的响应的有效时间.

Access-Control-Allow-Credentials: true

原文地址:https://www.cnblogs.com/mentalidade/p/6994113.html