Javascript 从CORS响应返回空对象读取标题

Javascript 从CORS响应返回空对象读取标题,javascript,cors,http-headers,Javascript,Cors,Http Headers,当我在浏览器中使用javascript(使用basic auth)进行获取时,我会得到一个类似于屏幕截图中的响应。 这很好,但是为什么console.log(response.headers)返回一个空对象呢 我添加了acces控件expose headers,因为这是一个cors请求,我想知道日期 目标是缓存响应(缓存API)并使用日期获取缓存的时间。 但是缓存版本也不会返回头。(但是使用chrome中的开发工具,我可以看到所有的头都在缓存中) 以下是代码的一部分: const cache=等

当我在浏览器中使用javascript(使用basic auth)进行获取时,我会得到一个类似于屏幕截图中的响应。 这很好,但是为什么
console.log(response.headers)
返回一个空对象呢

我添加了
acces控件expose headers
,因为这是一个cors请求,我想知道日期

目标是缓存响应(缓存API)并使用日期获取缓存的时间。 但是缓存版本也不会返回头。(但是使用chrome中的开发工具,我可以看到所有的头都在缓存中)

以下是代码的一部分:

const cache=等待缓存。打开('data');
let response=wait cache.match(url)
如果(!响应){
响应=等待获取(url{
标题:新标题({
“授权”:“基本1234fake567==”
})
});
如果(!response.ok)返回分派(setError(response.status.toString());
console.log(response.headers)/=>{}
wait cache.put(url、响应)
response=wait cache.match(url)
}
console.log(response.headers)/=>{}
const apiData:apiData=await response.json();

根据这一点,您不能使用
console.log(response.headers)
来调试和打印标题。相反,请尝试以下方法:

    const cache = await caches.open('data');
    let response = await cache.match(url)
    if (!response) {
      response = await fetch(url, {
        headers: new Headers({
          "Authorization": 'Basic 1234fake567=='
        })
      });
      if (!response.ok) return dispatch(setError(response.status.toString()));
      

      // This is new
      for (var pair of response.headers.entries()) {
         console.log(pair[0]+ ': '+ pair[1]);
      }

      await cache.put(url, response)
      response = await cache.match(url)
    }
    console.log(response.headers) // => {}
    const apiData: ApiData = await response.json();

你的剧本是什么?你能发布一点吗?试试
response.headers.forEach((value,key)=>console.log(key,value))
您还可以使用
response.headers.get(“…”)
获取单个标头。您是否正在正确地等待获取?需要查看代码。我添加了一些代码。这可能是因为本文中提到的CORS中的限制吗?该死,这只起作用:
response.headers.get('Date')
。我确实试过了,但在添加cors标题之前,我忽略了我们,没有再尝试。谢谢刚刚意识到,这就是Chris G在评论中提到的,我不敢相信这会起作用:-)我读了那篇文章,但第一个答案只是解决方案的一部分。第二个答案现在是我的解决方案。@roeland老实说,它非常模糊,
result.headers
打印为
{}
,给人一种错误的印象,如果你发现一个现有的问题,请不要发布答案。改为将其标记为重复。