Access-Control-Expose-Headers 是如何工作的?
How does Access-Control-Expose-Headers work?
我知道它决定了客户端可以从服务器响应中访问的 headers,但是,我对何时应用它感到困惑。它是否确定 每个 cross-origin 请求的 header 是否被 Access-Control-Allow-Origin
header 允许?
为了对此进行测试,我在 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
header,客户端应该只能访问CORS-safelisted response headers
,因此应该无法看到我的 foo
header.
但是当我在 https://www.google.com
(我允许使用 Access-Control-Allow-Origin
header 的 CORS)并向我的测试站点发送 GET
请求时,我看到响应中的 foo
header 就好了。为什么是这样?有人可以解释这是如何工作的,或者至少给我指出正确的方向吗?提前致谢。
我明白了。我收到自定义 header 的原因是我在 Chrome 开发工具的网络选项卡中阅读响应 headers。当我 运行 这个脚本时:
fetch('http://127.0.0.1:3000/')
.then(r => {console.log(response.headers.get('foo'))})
它打印 null
。所以 header 实际上无法访问获取请求,只能访问开发工具。
我知道它决定了客户端可以从服务器响应中访问的 headers,但是,我对何时应用它感到困惑。它是否确定 每个 cross-origin 请求的 header 是否被 Access-Control-Allow-Origin
header 允许?
为了对此进行测试,我在 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
header,客户端应该只能访问CORS-safelisted response headers
,因此应该无法看到我的 foo
header.
但是当我在 https://www.google.com
(我允许使用 Access-Control-Allow-Origin
header 的 CORS)并向我的测试站点发送 GET
请求时,我看到响应中的 foo
header 就好了。为什么是这样?有人可以解释这是如何工作的,或者至少给我指出正确的方向吗?提前致谢。
我明白了。我收到自定义 header 的原因是我在 Chrome 开发工具的网络选项卡中阅读响应 headers。当我 运行 这个脚本时:
fetch('http://127.0.0.1:3000/')
.then(r => {console.log(response.headers.get('foo'))})
它打印 null
。所以 header 实际上无法访问获取请求,只能访问开发工具。