Sur mon serveur (écrit en Go), je vous renvoie un champ d’en-tête personnalisé que je tente de lire lorsque je passe un appel ajax.
$.ajax({ url: url, success: function(data, status, request) { console.log("Custom field: " + request.getResponseHeader('Custom-Header')); // doing stuff with data } });
La réponse
HTTP/1.1 200 OK Access-Control-Allow-Origin: * Custom-Header: some,comma,separated,stuff,here Content-Type: text/csv Date: Mon, 10 Aug 2015 15:42:34 GMT Content-Length: 1379
Cela retournera toujours null
. J’ai essayé d’utiliser getResponseHeader
pour les en-têtes normaux dont j’ai confirmé la présence dans le paquet de réponse, tels que Content-Length
, Date
et Access-Control-Allow-Origin
; ceux-ci retournent tous null
aussi. Le seul en-tête qui fonctionne est Content-Type
.
Si j’utilise getAllResponseHeaders()
, une chaîne contenant uniquement Content-Type: text/csv
.
Comment puis-je accéder à d’autres en-têtes qui ne sont pas Content-Type
? J’ai vu qu’il y avait un bug lié à cela il y a 3 ans, mais n’affectait que Firefox. J’utilise Chrome v 44.0.2403.130 (64 bits).
Vous avez Access-Control-Allow-Origin
ce qui implique qu’il s’agit d’une demande d’origine croisée.
De la spécification :
La spécification de partage des ressources d’origine croisée filtre les en-têtes de réponse exposés par getAllResponseHeaders () pour les demandes d’origine croisée.
Vous devez explicitement rendre les en-têtes disponibles pour les demandes d’origine croisée avec Access-Control-Expose-Headers
.
Exemple de MDN :
Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header
Alors:
Access-Control-Expose-Headers: Custom-Header
Cela dit, veuillez utiliser le préfixe X-
pour vos en-têtes expérimentaux et non standard.