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 实际上无法访问获取请求,只能访问开发工具。