预检请求(Preflight Request)

简介: 预检请求(Preflight Request)

预检请求(Preflight Request)是CORS(Cross-Origin Resource Sharing,跨域资源共享)机制中的一种特殊类型的HTTP请求,用于在实际的请求之前询问服务器是否允许跨域请求。以下是预检请求的详细过程:

  1. 触发条件

    • 当浏览器检测到一个请求可能会违反同源策略时,比如使用了非CORS安全的方法(如PUT、DELETE等),或者请求中包含了自定义的HTTP头信息,浏览器会自动发送一个预检请求。
  2. 请求类型

    • 预检请求是一个HTTP OPTIONS方法的请求。
  3. 请求头信息

    • 预检请求会包含Access-Control-Request-Method头,指明实际请求将要使用的HTTP方法。
    • 如果实际请求中包含了自定义的HTTP头信息,预检请求还会包含Access-Control-Request-Headers头,列出所有自定义的头信息名称。
  4. 服务器响应

    • 服务器接收到预检请求后,需要决定是否允许跨域请求。如果允许,服务器的响应中应包含:
      • Access-Control-Allow-Origin:指定允许访问资源的源,可以是具体的域名,也可以是通配符*(但不推荐使用,因为它可能会带来安全风险)。
      • Access-Control-Allow-Methods:列出允许的HTTP方法。
      • Access-Control-Allow-Headers:如果请求中包含自定义头信息,这里需要列出这些头信息的名称。
    • 服务器还可以设置Access-Control-Max-Age头,用来指定预检请求的缓存时间,这样在这段时间内,浏览器不会再次发送预检请求。
  5. 浏览器处理预检请求的响应

    • 浏览器检查预检请求的响应,如果服务器允许跨域请求,并且响应中的头信息符合要求,浏览器将发送实际的请求。
    • 如果服务器的响应不允许跨域请求,或者响应中的头信息不符合要求,浏览器将阻止实际的请求。
  6. 发送实际请求

    • 如果预检请求得到批准,浏览器会发送实际的请求,该请求会包含之前在预检请求中询问的自定义头信息。

预检请求的机制确保了服务器在处理实际请求之前有机会检查并决定是否允许跨域请求,从而增强了Web应用的安全性。

相关文章
|
16天前
|
缓存 安全 数据安全/隐私保护
如何根据请求场景选择 GET 或 POST 请求方法?
【10月更文挑战第27天】根据不同的请求场景,综合考虑数据传输目的、安全性、数据量大小、幂等性要求以及缓存需求等因素,合理地选择GET或POST请求方法,能够更好地实现客户端与服务器之间的数据交互,提高系统的性能和安全性。
117 64
|
2天前
|
缓存 安全
预检请求(Preflight Request)
预检请求(Preflight Request)
|
2月前
|
测试技术 API
8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状态码400
8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状态码400
|
4月前
|
XML JSON 数据库
简单请求 VS 预检请求 preflight
简单请求 VS 预检请求 preflight
47 4
|
3月前
|
JSON 数据格式 开发者
preflight 错误,但服务端告诉你已经设置过了 CORS 信息怎么办
preflight 错误,但服务端告诉你已经设置过了 CORS 信息怎么办
|
4月前
|
缓存 Java UED
使用response.setHeader设置响应头
使用response.setHeader设置响应头
|
5月前
|
前端开发 对象存储 数据安全/隐私保护
阿里云前端直传has been blocked by CORS policy: Response to preflight request doesn‘t pass access control
阿里云前端直传has been blocked by CORS policy: Response to preflight request doesn‘t pass access control
648 2
|
5月前
httprequest- post- get -发送请求
httprequest- post- get -发送请求
35 1
|
6月前
|
API 数据格式
8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed状态码400
根据具体情况,逐步检查这些因素,找到引发400状态码的原因,并进行相应的修复。
94 0
HTTP request以及response原理 request请求消息数据
HTTP request以及response原理 request请求消息数据