`xhr.getAllHeaders()` не хватает некоторых заголовков в контексте расширения браузера?

Я работаю над расширением для браузера. В сценарии, выполняемом на всплывающей странице, я делаю ajax-запрос. В первой строке моего обработчика события xhr.onload у меня есть console.log(xhr.getAllResponseHeaders()). Однако некоторые заголовки в ответе отсутствуют. Я знаю, что это может быть проблемой с моим файлом 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": ["..."]
}

Вот фактические заголовки ответа, согласно вкладке отладки сети:

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

Однако, вот вывод console.log(xhr.getAllResponseHeaders()) в первой строке обработчика события xhr.onloaded:

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

КОРЫ

Следует отметить, что у меня нет очевидных ошибок CORS. Я использую Django с библиотекой django-cors-headers, и у меня есть все эти заголовки, включая критический заголовок Hx-Trigger, который я пытаюсь отладить в частности, явно перечисленные как разрешенные заголовки (хотя я уверен, что этот список должен быть только для заголовков входящих запросов, но неважно).

Знаете ли вы, почему в getAllResponseHeaders() отсутствует так много фактических заголовков?

Я разобрался. Вам нужно установить заголовок Access-Control-Expose-Headers в контексте CORS, чтобы заголовки были видны сценариям, выполняющимся на клиенте.

Релевантный MDN: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

Вернуться на верх