POST发起两次请求:OPTIONS预检请求

173 阅读2分钟

  在Web开发中,尤其是涉及到跨域资源访问的情况下,开发者可能会遇到一个现象:在发起POST请求时,浏览器实际上会先发送一个OPTIONS请求,随后再发送实际的POST请求。这种看似异常的行为其实是由CORS(Cross-Origin Resource Sharing,跨源资源共享)策略规范规定的,旨在保护用户的隐私和提升网络安全性。

同源策略与CORS

  同源策略是浏览器的一项基本安全机制,它规定了来自不同源(协议、域名、端口号均相同)的脚本只能访问同一源下的资源,防止恶意网站通过JavaScript脚本获取和篡改其他网站的敏感数据。
  在实际的Web服务中,往往会有跨域请求的需求。为了解决这一需求的同时兼顾安全性,W3C制定了CORS规范。按照CORS的规定,对于某些特定类型的请求(特别是非简单请求,例如带自定义请求头或Content-Type不是安全默认值的POST请求),浏览器在正式发送请求前,会先发起一个OPTIONS预检请求,向服务器询问是否允许该跨域请求。

OPTIONS预检请求的作用

  OPTIONS请求是一种HTTP请求方法,它的目的是询问服务器指定URL支持哪些HTTP方法,或者询问特定HTTP方法(如POST)时服务器期望什么样的附加信息(如自定义请求头)。   对于POST请求的两次请求情况,浏览器首先发起OPTIONS请求,其主要包含以下目的:

  1. 确认权限:询问服务器是否允许该来源进行POST请求。
  2. 获取允许的方法:确定服务器允许的HTTP方法列表。
  3. 验证请求头:告知服务器预期要发送的请求头信息,并等待服务器确认是否接受这些请求头。