Estoy trabajando en una extensión del navegador. En un script que se ejecuta en la página emergente, estoy haciendo una solicitud ajax. En la primera línea de mi controlador para el evento xhr.onload , tengo console.log(xhr.getAllResponseHeaders()) . Sin embargo, faltan algunos encabezados de la respuesta. Sé que esto podría ser un problema con mi archivo manifest.json, así que aquí está, con algunos detalles adicionales eliminados:
{ "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": ["..."] }Estos son los encabezados de respuesta reales, de acuerdo con la pestaña de depuración de red:
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 Sin embargo, esta es la salida de console.log(xhr.getAllResponseHeaders()) en la primera línea del controlador de eventos xhr.onloaded :
content-length: 220 content-type: text/html; charset=utf-8Debo señalar que no tengo errores CORS obvios. Estoy usando Django con la biblioteca django-cors-headers, y tengo todos estos encabezados, incluido el encabezado crítico Hx-Trigger que estoy tratando de depurar, en particular, enumerados explícitamente como encabezados permitidos (aunque estoy bastante seguro de que la lista es solo se supone que es para encabezados de solicitudes entrantes, pero lo que sea).
¿Sabe por qué a getAllResponseHeaders() le faltan tantos encabezados reales?
Me lo imaginé. Debe establecer el Access-Control-Expose-Headers en un contexto CORS para que los encabezados sean visibles para los scripts que se ejecutan en el cliente.
MDN relevante: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers