http中的预检请求

文章类型:http

发布者:hp

发布时间:2025-04-17

一:定义

预检请求是浏览器在发送非简单跨域请求前自动发起的 ‌OPTIONS 请求‌,用于确认服务器是否允许后续实际请求

二:触发条件

(1)非简单HTTP方法

   PUT、DELETE、PATCH、CONNECT

(2)请求包含非简单Content-Type

   application/x-www-form-urlencoded

   multipart/form-data

   text/plain

(3)携带自定义或非安全请求头

   Authorization、X-Custom-Header 等自定义头‌

三:流程

1:浏览器发起预检

   Origin:当前网页域名(必填)

   Access-Control-Request-Method:实际请求的方法(如PUT)

   Access-Control-Request-Headers:实际请求将携带的自定义头部(如X-Token)

2:服务器响应验证

   Access-Control-Allow-Origin:允许的源(如https://example.com)

   Access-Control-Allow-Methods:允许的方法(如GET, POST, PUT)

   Access-Control-Allow-Headers:允许的头部(如X-Token, Content-Type)

   Access-Control-Max-Age:预检结果的缓存时间(秒,避免重复预检)

3:发送实际请求

   若服务器验证通过,浏览器发送实际请求

四:图解

   

五:代码

axios("http://www.cqhxb.com/api/user",{ 
  method:"POST",
  headers:{// 设置请求头
     a: 1,
     b: 2,
     content-type: "application/json"
  },
   body: JSON.stringify({ name: "john", age: 20 })
});

六:拓展

1:简单请求

请求方式=>仅使用特定 HTTP 方法,GET、POST、HEAD

仅包含安全请求头=>Accept、Accept-Language、Content-Language、Content-Type

Content-Type 限制=>application/x-www-form-urlencoded、multipart/form-data、text/plain

七:总结

1:预检请求是 CORS 机制的 “安全门卫”,通过 OPTIONS 方法提前验证跨域请求的合法性

2:浏览器自动触发

3:跨域请求是前提