使用邮差工具/cURL/在Chrome控制台中测试CORS

使用邮差工具/cURL/在Chrome控制台中测试CORS,curl,cors,google-chrome-devtools,postman,Curl,Cors,Google Chrome Devtools,Postman,我正在用邮递员工具测试CORS,我经常 access-control-allow-origin → null 对于获取或选项请求 http://localhost:4000/api/accounts?Host=http://localhost:4200/&X-Origin=http://jquery.com 同样,使用Origin代替X-Origin也不会改变结果。 同时,如果我像这样使用cURL curl -H "Origin: http://jquery.com" --verb

我正在用邮递员工具测试CORS,我经常

access-control-allow-origin → null
对于
获取
选项
请求

http://localhost:4000/api/accounts?Host=http://localhost:4200/&X-Origin=http://jquery.com
同样,使用
Origin
代替
X-Origin
也不会改变结果。 同时,如果我像这样使用cURL

 curl -H "Origin: http://jquery.com" --verbose http://localhost:4000/api/accounts
我确实可以访问API

< access-control-allow-origin: http://jquery.com
并打印API返回的JSON对象

现在我的问题如下:

  • 如何使用邮递员正确测试CORS?我注意到,当在服务器上将alloworigins选项设置为
    *
    Postman时,它会返回

    访问控制允许原点→ *

  • 只有当我明确允许一组原点时,才会出现上述问题,如:

    `origin: ["https://www.getpostman.com/", "http://localhost:4200/", "http://jquery.com"]`
    
  • 我注意到允许
    http://jquery.com/
    而不是
    http://jquery.com
    将不允许来源为
    来源的请求=http://jquery.com
  • 我注意到cURL返回资源的内容(在本例中为JSON数据),即使请求来自非授权来源。这是正常的还是意味着我忘记在服务器上配置公开此数据的内容

  • 从客户端发送的
    Origin
    头是发起请求的方案、域和端口(如果不是80)。尾部的
    /
    在标头中无效。您也不能发送多个来源。从服务器发送的
    Access Control Allow Origin
    可以是
    *
    ,允许所有来源,也可以从请求头发回相同的来源

    例如,如果您向
    http://www.telerik.com/
    在Chrome中,请求头包含
    来源:http://www.telerik.com
    (浏览器会自动发送此消息),来自服务器的响应标头包含
    访问控制允许来源:http://www.telerik.com

    至于最后一个问题,根据规范,用户代理负责实施CORS,因此我怀疑cURL没有验证请求和响应是否匹配

    用户代理验证 请求源于匹配

    来源:

    您可以试试

    curl -X OPTIONS 'https://domain/path/file.png' -H "Origin: https://yoursitedomain" -H "Access-Control-Request-Method: GET" -v -o /dev/null
    
    curl -X OPTIONS 'https://domain/path/file.png' -H "Origin: https://yoursitedomain" -H "Access-Control-Request-Method: GET" -v -o /dev/null