javascript - ¿Por qué el navegador ignora un encabezado set-cookie y las cookies no se guardan de una llamada Ajax usando fetch?
(1)
Por alguna razón, mi navegador (he intentado varios) no está configurando cookies a pesar de que el servidor está devolviendo una respuesta de configuración de cookie válida cuando la llamada GET se realiza a través de Ajax usando la api de fetch para realizar la solicitud
Si realizo la llamada GET idéntica a través de solo poner la URL en el navegador, el navegador respetará los encabezados de respuesta de la cookie de configuración (idénticos) y las cookies se guardarán.
He inspeccionado los encabezados de solicitud y respuesta a través de LiveHeaders y el inspector de red de Chrome y no hay diferencia.
EDITAR: Para aclarar, esto NO es un problema con el envío de cookies ajax al servidor. Es un problema donde las cookies no son guardadas en absoluto por el navegador cuando una respuesta vuelve con encabezados de cookies de configuración válidos (que según la documentación deben respetarse, ya sea ajax o no).
Después de mucho golpearme la cabeza, resolví este problema estableciendo la propiedad ''credenciales'' de la solicitud en ''incluir''. Tenía la impresión de que esto solo controlaba el envío de cookies al servidor en las solicitudes de recuperación, pero aparentemente, al menos en la implementación que estoy usando, si no está configurado también significa que las cookies no se guardarán si se envían de vuelta el servidor.
De la especificación en https://fetch.spec.whatwg.org/
Una solicitud tiene un modo de credenciales asociado, que es "omitir", "mismo origen" o "incluir". A menos que se indique lo contrario, es "omitir".
El modo de credenciales de la solicitud controla el flujo de credenciales durante una búsqueda. Cuando el modo de la solicitud es "navegar", se asume que su modo de credenciales es "incluir" y la captura no cuenta actualmente por otros valores. Si el HTML cambia aquí, este estándar necesitará los cambios correspondientes.
Las credenciales son cookies HTTP, certificados de cliente TLS y entradas de autenticación.