我正在使用 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 对象。
现在我的问题如下:
如何使用 Postman 正确测试 CORS?我注意到,当将服务器上的允许来源选项设置为
*
邮递员确实返回
access-control-allow-origin → *
仅当我明确允许一组起源时,才会出现上述问题,例如:
`origin: ["https://www.getpostman.com/", "http://localhost:4200/", "http://jquery.com"]`
http://jquery.com/
而不是 http://jquery.com
将不允许来源为 Origin=http://jquery.com
的请求?你可以试试
curl -X OPTIONS 'https://domain/path/file.png' -H "Origin: https://yoursitedomain" -H "Access-Control-Request-Method: GET" -v -o /dev/null
从客户端发送的
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 不会验证请求和响应是否匹配。
用户代理验证该值和来源 请求发起的匹配。
基于 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();