什么是预请求

当提到预请求,我们可以把请求分成两大类:简单请求(simple requests)预请求(preflighted requests)

简单请求 - simple requests

简单地说,简单请求就是不会触发预请求检查(preflight check)

简单请求的定义需要满足以下几个标准

  1. 请求方法为以下几种之一

    • GET
    • HEAD
    • POST
  2. 请求头一定只能有以下几种

    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type (但只能为application/x-www-form-urlencodedmultipart/form-datatext/plain
    • Last-Event-ID
    • DPR
    • Save-Data
    • Viewport-Width
    • Width
  3. 在请求中使用的任何XMLHttpRequestUpload对象上都没有注册事件监听器;可以使用XMLHttpRequest.upload访问这些属性
  4. 在这个请求中没有 ReadableStream对象被使用

预请求 - preflight requests

不为简单请求的,自然就是预请求。
浏览器会在发送原请求之前,发送一个OPTIONS请求来确定接下来的原请求是不是能够安全地发起。
最常见的预请求例子就是,原请求的方法是DELETEPUT或其他可以修改服务器数据的方法(根据Method语义而定),或者附带了一些非CORS安全的请求头


原文链接:

  1. CORS, preflighted requests & OPTIONS method