fetch/axios/ajax 发起的请求如何获取响应头

最近遇到了一个问题,在翻遍文档和询问 ai 后依然无法解决时,我是如何一步步解决的

事情是这样的:后端接口某个数据放在了响应头中,但是在 js 获取不到这个响应头,一直返回 null

js 复制代码
fetch().then((response) => {
  const xx = response.headers.get("X-My-Custom-Header"); // 获取不到
});

我只能获取到 content-typecontent-length 这两个响应头,其他的一个也获取不到

js 复制代码
fetch().then((response) => {
  const contentType = response.headers.get("Content-Type"); // 可以获取到
  const contentLength = response.headers.get("Content-Length"); // 可以获取到
});

翻了几遍 mdn,只找到几个获取响应头的方法:getkeysentries,我都试了,没有用

于是,又去问了 aiai 的回答如下:

看到这回复,说了等于没说一样

不过,转念一想,它说响应头是敏感信息,不允许随意获取,那有什么办法可以安全的获取响应头呢?

安全访问,跨域不就是安全访问么

我就想到了跨域的响应头 Access-Control-Allow-Origin 等几个,那获取响应头是不是也和他们有关

于是我就去翻了 Access-Control-Allow-Origin 的文档

Access-Control-Allow-Origin 文档中没找到有用的信息,不过我被左边几个 Access-xxx-Headers 的响应头吸引了

于是,我就把这几个 Access-xxx-Headers 的响应头都点开看了下,当点到 Access-Control-Expose-Headers 时,看到了这句话:

这不就是我一直想要找到信息吗

马上就把这个响应头给加上,然后问题就成功解决了

js 复制代码
fetch().then((response) => {
  const xxx = response.headers.get("X-My-Custom-Header"); // 可以获取了
});

原因

浏览器为了防止跨域获取资源,做了很多安全设置,获取响应头也是其中之一

使用 Access-Control-Expose-Headers 这个响应头的前提是,跨域没有问题,也就是 Access-Control-Allow-Origin 这个响应头已经配置好了,然后在配置 Access-Control-Expose-Headers 这个响应头,就可以安全的获取响应头了

如果设置为 Access-Control-Expose-Origin: *,表示所有影响头都可以获取

如果设置为 Access-Control-Expose-Origin: X-My-Custom-Header, X-Another-Custom-Header,表示只有 X-My-Custom-Header, X-Another-Custom-Header 这个两个响应头可以获取

现在你可以获取到的响应头是:

  • Content-Type
  • Content-Length
  • X-My-Custom-Header
  • X-Another-Custom-Header

总结

ai 给的信息不一定对,自己要有提取信息的能力

比如:我从 ai 给的信息中,提取出的有用信息是:出于安全考虑,响应头是敏感信息,不允许随意获取

然后就从【安全获取】这块去查找相关的信息

最后,解决问题前要先提取有用的信息,然后再去查找相关的文档,这样效率会高很多

相关推荐
2601_9628857219 分钟前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎12341 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
陈随易3 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周3 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师4 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing984 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan4 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
梦想平凡5 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
IT_陈寒5 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端
计算机魔术师5 小时前
Suno 发布 v6 音乐模型,推出 v6、v6-wild、v6-mini 三个版本
前端