如何识别 CORS 预检请求?
How can I identify a CORS preflight request?
一个 CORS 预检请求显然使用了 OPTIONS 方法并且有一个 Origin header。但是,浏览器可以决定为 任何 HTTP 请求添加来源 header。此外,OPTIONS 可用于 CORS 以外的其他功能。 (如何)我可以准确地(没有误报或误报)识别请求是否是 CORS 预检请求?
检查 Access-Control-Request-Method header。在预检请求以外的请求中发送它没有多大意义。
检查预检请求中是否存在这些基本信息:
- 请求的 HTTP 方法是
OPTIONS
- 它有一个
Origin
header
- 它有一个
Access-Control-Request-Method
header,表明它试图用来消耗你的 service/resource 的实际方法是什么
注意事项
从理论上讲,您可能非常聪明,可以手动设置那些 header 并出于某种原因尝试提出一些 fake-Preflight 请求。
但是,您的浏览器会报错并显示以下示例消息:
Refused to set unsafe header "Origin"
(在 Chrome 上作为 XHR 请求进行测试)
而其他应用程序(例如 Postman)会将自己的 Origin
设置为 Origin: chrome://extension...
一个 CORS 预检请求显然使用了 OPTIONS 方法并且有一个 Origin header。但是,浏览器可以决定为 任何 HTTP 请求添加来源 header。此外,OPTIONS 可用于 CORS 以外的其他功能。 (如何)我可以准确地(没有误报或误报)识别请求是否是 CORS 预检请求?
检查 Access-Control-Request-Method header。在预检请求以外的请求中发送它没有多大意义。
检查预检请求中是否存在这些基本信息:
- 请求的 HTTP 方法是
OPTIONS
- 它有一个
Origin
header - 它有一个
Access-Control-Request-Method
header,表明它试图用来消耗你的 service/resource 的实际方法是什么
注意事项
从理论上讲,您可能非常聪明,可以手动设置那些 header 并出于某种原因尝试提出一些 fake-Preflight 请求。
但是,您的浏览器会报错并显示以下示例消息:
Refused to set unsafe header "Origin"
(在 Chrome 上作为 XHR 请求进行测试)
而其他应用程序(例如 Postman)会将自己的 Origin
设置为 Origin: chrome://extension...