预检请求(Preflight Request)

举报
yd_272570714 发表于 2024/12/25 15:19:35 2024/12/25
【摘要】 预检请求(Preflight Request)是CORS(Cross-Origin Resource Sharing,跨域资源共享)机制中的一种特殊类型的HTTP请求

预检请求(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应用的安全性。

【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。