介绍

CORS 允许服务器在响应头中指定允许的来源域。前端通过标准的 XMLHttpRequest 或 Fetch 请求与不同域的服务器通信。

而在 CORS 中会有 简单请求 和 复杂请求的概念。

请求类型

简单请求

简单请求不会触发 CORS 预检请求。这样的请求为“简单请求”。

简单请求是一种跨域请求,但由于它满足一组特定的条件,浏览器会直接发送实际的请求,而不需要发送预检请求。这是跨域请求中的一种优化,可以减少不必要的网络请求。

简单请求同时满足以下条件:

  1. 请求方法只能是以下之一:
    1. GET
    2. HEAD
    3. POST
  2. HTTP 头信息只能是以下之一:
  3. 请求中的任何 XMLHttpRequestUpload 对象均没有注册任何事件监听器。
  4. 请求中没有使用 ReadableStream 对象。
  5. 请求中没有使用 FormData 对象。

复杂请求

除以上情况外的。

复杂请求不符合简单请求的条件,通常是因为请求方法是非标准的或者包含自定义头信息。对于复杂请求,浏览器会发送预检请求(OPTIONS 请求)到目标服务器,以获取服务器是否允许跨域请求的信息。

复杂请求的例子

  1. 使用非标准的请求方法,如 PUT、DELETE。
  2. 在请求头中使用自定义的头信息,例如 AuthorizationX-Requested-With