javascript - `xhr.getAllHeaders()` 在浏览器扩展上下文中缺少一些 header ?

标签 javascript django ajax htmx

我正在开发一个浏览器扩展。在弹出页面上运行的脚本中,我正在发出 ajax 请求。在我的 xhr.onload 事件处理程序的第一行,我有 console.log(xhr.getAllResponseHeaders())。但是,响应中的一些 header 丢失了。我知道这可能是我的 manifest.json 文件的问题,所以在这里删除了一些额外的细节:

{
  "manifest_version": 2,
  "name": "...",
  "version": "1.0",
  "description": "...",
  "options_ui": { "page": "options.html" },
  "icons": {
    "16": "icons/favicon-16x16.png",
    "32": "icons/favicon-32x32.png"
  },
  "browser_action": {
    "default_popup": "popup.html",
    "default_icon": "./icons/favicon-32x32.png"
  },
  "key": "...",
  "permissions": ["identity"],
  "content_security_policy": "script-src 'self' https://unpkg.com https://apis.google.com https://www.gstatic.com https://www.googleapis.com https://securetoken.googleapis.com; object-src 'self'",
  "content_scripts": ["..."]
}

根据网络调试选项卡,这些是实际的响应 header :

HTTP/1.1 200 OK
Date: Wed, 27 Oct 2021 18:09:36 GMT
Server: WSGIServer/0.2 CPython/3.9.6
Content-Type: text/html; charset=utf-8
Hx-Trigger: setupLogin
X-Frame-Options: DENY
Content-Length: 220
Vary: Cookie, Origin
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: chrome-extension://kcegdmcjklppcfbmfjgkkomecpaofoec

但是,这是 xhr.onloaded 事件处理程序第一行的 console.log(xhr.getAllResponseHeaders()) 的输出:

content-length: 220
content-type: text/html; charset=utf-8

CORS

我应该注意到我没有明显的 CORS 错误。我将 Django 与 django-cors-headers 库一起使用,并且我拥有所有这些 header ,包括我正在尝试调试的关键 Hx-Trigger header ,特别是明确列为允许的 header (尽管我很确定该列表是只应该用于传入的请求 header ,但无论如何)。

您知道为什么 getAllResponseHeaders() 缺少这么多实际 header 吗?

最佳答案

我想通了。您需要在 CORS 上下文中设置 Access-Control-Expose-Headers header ,以便 header 对客户端上执行的脚本可见。

相关 MDN: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

关于javascript - `xhr.getAllHeaders()` 在浏览器扩展上下文中缺少一些 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69743602/

相关文章:

python - Django:使用 PIL、Amazon S3 和 Boto 调整图像大小和上传

javascript - Laravel 5 Eloquent 对象和 ajax

php - 连续Ajax GET时jscrollPane消失

Javascript 函数在应该返回 true 的地方返回 false

javascript - 如何在嵌套字段中保存Mongo文档自己的_id?

python - 将 OpenCV 与 Django 结合使用

django - 将 Django 消息框架与 rest_framework 结合使用

javascript - 使用给定数字对 JSON 数组进行分组

javascript - 根据依赖项列表订购对象数组?

javascript - Video.js - loadeddata 事件永远不会触发