我理解这是决定客户端能从服务器响应中访问哪些头信息,但是我对它何时被应用有些困惑。它是否决定每个受到Access-Control-Allow-Origin
头允许的跨域请求的头信息?
为了测试这个问题,我在express中设置了一个测试站点,并加入以下代码:
app.get('/',(req,res)=>{
res.set('Access-Control-Allow-Origin','https://www.google.com') // to be able to make a cross-origin request
res.set('foo', 'bar') //custom header that should get filtered because i havent set the access-control-expose-headers header
res.send('Hello world')
})
基于我的理解,因为我没有在响应中设置任何特殊的
Access-Control-Expose-Headers
头,客户端只能访问CORS安全列表响应头
,因此不应该能够看到我的foo
头。但是,当我在
https://www.google.com
(我允许使用Access-Control-Allow-Origin
头进行CORS)并向我的测试站点发送GET
请求时,我可以很好地在响应中看到foo
头。这是为什么?有人能解释一下这是如何工作的,或者至少指点我正确的方向吗?先谢谢了。
Access-Control-Expose-Headers
与Access-Control-Allow-Headers
混淆了;这两个标头有不同的目的。Access-Control-Expose-Headers
指定了除所谓的CORS安全响应标头之外,允许来源上下文中运行的脚本可以从响应中读取哪些响应标头。 - jub0bs