CORS(Cross-Origin Resource Sharing 跨源资源共享)是一种认证机制。

同源策略

CORS 中的源由协议,域名和端口三部分组成。这三部分一样则认为是一个源,可以简单理解为浏览器认为他们是同一个站点。
访问同一个源下资源不会有限制,这个机制叫做同源策略。
当想从一个源访问另一个源的资源时就需要一种机制来保证安全了,这就是 CORS。

CORS

动态和静态

CORS 根据请求类型分为静态和动态两种。

  • 像 HTML 里 img 标签的 src 字段,如果填了其它站点的资源,就是一种静态 CORS。
  • 在 Ajax 请求中访问跨源的资源就是动态 CORS。

非简单请求

在浏览器里,在非简单请求且跨域的情况下,浏览器会发送 OPTIONS 预检请求。即先发送一个 OPTIONS 请求来检查目标服务器是否允许跨源。
简单请求需要满足下面两个条件

  • 请求方法是这三种之一(HEAD,GET,POST)
  • HTTP 头信息不超过这几个字段
    • Accept
    • Accept Language
    • Last-Event-ID
    • Content-Type(且值为 application/x-www-form-urlencoded, multipart/form-data, text/plain 中的)
      其余为非简单请求。

和 CORS 相关的 Header

  • Origin
    浏览器在请求跨源资源时,会在请求头上加上 Origin Header,Origin 通常就是从 Refer 里截取的协议,域名和端口信息,表示 Ajax 请求的来源站点。
  • Access-Control-Allow-Origin
    如果服务器支持 CORS,会在相应中加上这个 Header,表示服务器信任的源。当值为 * 时,表示信任所有源。浏览器也会检查这个 Header,如果响应中没有这个字段或者没有当前的源,会在控制台报错。
  • Access-Control-Allow-Methods
    发起跨域时允许的 HTTP 方法,由逗号分隔。表示只能通过这些方法发起跨域请求。

参考

https://blog.csdn.net/wonain/article/details/105903666
https://blog.csdn.net/qq_43135259/article/details/125236412