2016-08-15 1 views
12

J'utilise fetch sur chrome Version 52.0.2743.82 (64 bits). Je veux obtenir tous les en-têtes dans la réponse. L'extrait suivant renvoie uniquement content-type mais si vous jetez un coup d'oeil dans les outils de développement chrome, il affiche de nombreux autres en-têtes de réponse. Comment obtenir d'autres en-têtes.Comment obtenir les en-têtes de la réponse de fetch

fetch('https://httpbin.org/get') 
    .then(response => { 
     const headers = response.headers.entries(); 
     let header = headers.next(); 
     while (!header.done){ 
     console.log(headers.value); 
     header = header.next(); 
     } 
    }) 

J'ai essayé de remplir en polychrome (manuellement) l'implémentation de github. Toujours pas de chance.

+2

Si vous savez quel en-tête vous recherchez, vous pouvez essayer response.headers.get ('header-name') – KumarM

+0

En regardant la table de compatibilité en bas de cette page, il ne dit pas que chrome supporte les entrées() encore. https://developer.mozilla.org/en-US/docs/Web/API/Headers – KumarM

Répondre

26

Vous ne pouvez pas accéder à tous les en-têtes lorsque vous demandez un contenu inter-domaines via ajax. Vous pouvez accéder à tous les en-têtes si l'origine est la même.

Comme expliqué dans W3 Spécifications here, seulement Content-Type, Last-modified, Content-Language, Cache-Control, Expires, Pragma en-têtes sont accessibles.

En outre https://httpbin.org/get envoyer seulement Content-Type en-tête de la liste des en-têtes accessibles ainsi, vous avez cela seulement.

Modifier: Vous pouvez exposer des en-têtes de réponse CORS non standard en envoyant Access-Control-Expose-Headers avec les en-têtes auxquels vous souhaitez que le client accède sur la réponse.

+0

C'était super utile. Pour les développeurs de Rails 5, l'édition de 'config/initializers/cors.rb' a ​​fonctionné. J'ai ajouté: 'expose: ['Location'],' à la déclaration 'resource' * '' – jasonseminara