如何识别CORS飞行前请求?

如何识别CORS飞行前请求?,cors,preflight,Cors,Preflight,CORS飞行前请求显然使用了OPTIONS方法,并且有一个Origin头。但是,浏览器可以决定为任何HTTP请求添加源标头。此外,选项可用于CORS以外的其他功能。(如何)我可以准确地识别(没有误报或否定)请求是否为CORS飞行前请求?检查标头。在飞行前请求之外的其他请求中发送它没有多大意义。检查飞行前请求中是否存在这些基本信息: 请求的HTTP方法是OPTIONS 它有一个原点标题 它有一个accesscontrolrequestmethod头,指示它试图使用什么实际方法来使用您的服务/资源

CORS飞行前请求显然使用了OPTIONS方法,并且有一个Origin头。但是,浏览器可以决定为任何HTTP请求添加源标头。此外,选项可用于CORS以外的其他功能。(如何)我可以准确地识别(没有误报或否定)请求是否为CORS飞行前请求?

检查标头。在飞行前请求之外的其他请求中发送它没有多大意义。

检查飞行前请求中是否存在这些基本信息:

  • 请求的HTTP方法是
    OPTIONS
  • 它有一个
    原点
    标题
  • 它有一个
    accesscontrolrequestmethod
    头,指示它试图使用什么实际方法来使用您的服务/资源
  • 注意事项

    从理论上讲,你可以是一个非常聪明的人,手动设置这些标题,并试图出于某种原因提出一些虚假的飞行前请求

    但是,您的浏览器会出现以下示例消息:
    拒绝设置不安全的标题“Origin”
    (在Chrome上作为XHR请求进行测试)
    而其他应用程序,如Postman,则会将自己的
    Origin
    设置为,比如
    Origin:chrome://extension...

    你为什么在意?飞行前请求设计为与常规选项请求兼容。只要以相同的方式响应所有选项请求。@Quentin如果我这样做,那么我可能会以403回答一个完全有效的非CORS飞行前选项请求,因为客户端(不必要地)添加了一个原点,然后根据CORS请求的有效原点列表进行检查,结果是403。