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

问题描述 投票:0回答:3

我正在使用 Postman 工具测试 CORS,并且不断得到

access-control-allow-origin → null

对于

GET
OPTIONS
请求

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

我还使用

http
和 chrome Javascript 控制台打开了 jQuery 网站来执行此代码:

$.get("http://localhost:4000/api/accounts").then(function(val){console.log(val);})

它打印了 API 返回的 JSON 对象。

现在我的问题如下:

  1. 如何使用 Postman 正确测试 CORS?我注意到,当将服务器上的允许来源选项设置为

    *
    邮递员确实返回

    access-control-allow-origin → *

仅当我明确允许一组起源时,才会出现上述问题,例如:

`origin: ["https://www.getpostman.com/", "http://localhost:4200/", "http://jquery.com"]`
  1. 我注意到允许
    http://jquery.com/
    而不是
    http://jquery.com
    将不允许来源为
    Origin=http://jquery.com
    的请求?
  2. 我注意到 cURL 会返回资源的内容(在本例中为 JSON 数据),即使请求来自未经授权的来源也是如此。这是正常现象还是意味着我忘记在服务器上配置公开此数据的某些内容?
curl cors google-chrome-devtools postman
3个回答
35
投票

你可以试试

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

18
投票

从客户端发送的

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

例如,如果您在Chrome中向

http://www.telerik.com/
发出请求,则请求标头包含
Origin:http://www.telerik.com
(浏览器自动发送此信息),服务器的响应标头包含
Access-Control-Allow-Origin:http://www.telerik.com

关于你的最后一个问题,根据规范,用户代理负责执行 CORS,因此我怀疑 cURL 不会验证请求和响应是否匹配。

用户代理验证该值和来源 请求发起的匹配。

来源:https://www.w3.org/TR/cors/


0
投票

基于 nicks-cors-test 您可以使用简单的 js 在浏览器控制台内进行测试: 只需要 jquery 作为依赖,并将

DEST_URL_ADDRESS
替换为 url

function main() 
{
    console.log("nicks-cors-test");
    $.ajax
    ({
        url: "DEST_URL_ADDRESS",
        success: function(data) 
        {
            console.log(data);
        }
    });
}

然后运行

main();

© www.soinside.com 2019 - 2024. All rights reserved.