497 votes

Accéder à la page web, en-Têtes HTTP en JavaScript

Comment puis-je accéder à une page en-têtes de réponse HTTP via JavaScript?

Liée à cette question, qui a été modifié à poser sur l'accès à deux en-têtes HTTP.

Connexes:
Comment puis-je accéder à la requête HTTP champs d'en-tête via JavaScript?

Dupliquer:
Comment puis-je lire le courant des en-têtes sans faire une nouvelle demande avec JS?

427voto

Raja Points 1913

Utilisation de code javascript suivant pour obtenir tous les en-têtes HTTP.

var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
alert(headers);

345voto

keparo Points 13747

Malheureusement, il n'y a pas une API pour vous donner l'-têtes de réponse HTTP pour votre première demande de page. C'était la question initiale posté ici. Il a été demandé à plusieurs reprises, aussi, parce que certaines personnes voudraient de se procurer les en-têtes de réponse de l'original de la demande de page sans la délivrance d'un autre.

Pour les Requêtes AJAX:

Si une requête HTTP sur AJAX, il est possible d'obtenir les en-têtes de réponse avec le getAllResponseHeaders() méthode. Il fait partie de la XMLHttpRequest API. Pour voir comment cela peut être appliqué, découvrez la fetchSimilarHeaders() la fonction ci-dessous. Notez que c'est une façon de contourner le problème qui ne seront pas fiables pour certaines applications.

myXMLHttpRequest.getAllResponseHeaders();

L'API a été spécifié dans la suite de candidat recommandation pour XMLHttpRequest: XMLHttpRequest - W3C Candidat Recommandation 3 août 2010

Plus précisément, le getAllResponseHeaders() la méthode a été spécifié dans la section suivante:
http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-méthode

Le MDN documentation est bon, aussi:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.

Ce ne sera pas vous donner d'informations sur la page d'origine de la requête HTTP en-têtes de réponse, mais il pourrait être utilisé pour émettre des hypothèses sur le contenu de ces en-têtes ont été. Plus sur cela est décrit ci-après.

L'obtention de valeurs d'en-tête de la première Page de la Demande:

Cette question est posée, il y a plusieurs années, de demander spécifiquement sur la façon d'arriver à l'original-têtes de réponse HTTP de la page en cours (c'est à dire la même page à l'intérieur de laquelle le javascript a été en cours d'exécution). C'est une tout autre question que de simplement obtenir les en-têtes de réponse pour une requête HTTP. Pour la première demande de page, les en-têtes ne sont pas facilement disponibles pour javascript. Si les valeurs d'en-tête que vous devez être fiable et suffisamment cohérente si vous demander à nouveau la même page via AJAX dépendra de votre application particulière.

Voici quelques suggestions pour contourner ce problème.

1. Demandes sur les Ressources qui sont en grande partie statique

Si la réponse est en grande partie statique et les en-têtes ne devrait pas varier beaucoup entre les demandes, vous pouvez faire une requête AJAX pour la même page, vous êtes actuellement sur et supposons qu'ils sont, ils sont les mêmes valeurs qui faisaient partie de la page de réponse HTTP. Cela pourrait vous permettre d'accéder à l'en-tête, vous devez à l'aide de la belle XMLHttpRequest API décrite ci-dessus.

function fetchSimilarHeaders (callback) {
    var request = new XMLHttpRequest();
    request.onreadystatechange = function () {
        if (request.readyState === 4) {
            //
            // The following headers may often be similar
            // to those of the original page request...
            //
            if (callback && typeof callback === 'function') {
                callback(request.getAllResponseHeaders());
            }
        }
    };

    //
    // Re-request the same page (document.location)
    // We hope to get the same or similar response headers to those which 
    // came with the current page, but we have no guarantee.
    // Since we are only after the headers, a HEAD request may be sufficient.
    //
    request.open('HEAD', document.location, true);
    request.send(null);
}

Cette approche va être problématique si vous avez vraiment de s'appuyer sur les valeurs d'être cohérent entre les requêtes, puisque vous ne pouvez pas garantir qu'ils sont les mêmes. Il va dépendre de votre application spécifique et si vous savez que la valeur que vous avez besoin est quelque chose qui ne sera pas en passant de l'un demande à l'autre.

2. Faire Des Inférences

Il y a certaines propriétés de la NOMENCLATURE dont le navigateur détermine par examiner les en-têtes. Certaines de ces propriétés reflètent les en-têtes HTTP directement (par exemple, navigator.userAgent la valeur de la HTTP UserAgent champ d'en-tête). Par renifler les propriétés disponibles, vous pourriez être en mesure de trouver ce dont vous avez besoin, ou quelques indices pour indiquer quel est le contenu de la réponse HTTP.

3. Les ranger

Si vous contrôlez le côté serveur, vous pouvez accéder à tout l'en-tête que vous aimez comme vous construire la réponse complète. Les valeurs peuvent être transmises au client avec la page, planqué dans certains balisage ou peut-être dans un inline structure JSON. Si vous voulez avoir tous les-tête de requête HTTP à la disposition de votre javascript, vous pouvez itérer sur le serveur et de les renvoyer comme des valeurs cachées dans le balisage. Ce n'est probablement pas idéal pour envoyer des valeurs d'en-tête de cette façon, mais vous pouvez certainement le faire pour la valeur spécifique dont vous avez besoin. Cette solution est sans doute inefficace, trop, mais ce serait faire le travail si vous en avez besoin.

31voto

Allain Lalonde Points 28717

À l'aide de XmlHttpRequest vous pouvez tirer vers le haut de la page en cours, puis d'examiner les en-têtes http de la réponse.

Dans le meilleur des cas est de faire une requête HEAD et ensuite examiner les en-têtes.

Pour quelques exemples de le faire regarder http://www.jibbering.com/2002/4/httprequest.html

Juste mes 2 cents.

25voto

savetheclocktower Points 1088

Une autre façon d'envoyer les informations d'en-tête de JavaScript serait par le biais de cookies. Le serveur peut en extraire toutes les données dont il a besoin dans les en-têtes de requête et de les envoyer à l'intérieur d'un Set-Cookie - tête de réponse - et les cookies peuvent être lus en JavaScript. Comme keparo dit, cependant, il est préférable de le faire pour un ou deux en-têtes, plutôt que pour eux tous.

5voto

Leo Points 1587

Comment puis-je accéder à la requête HTTP champs d'en-tête via JavaScript?

Si nous parlons de la Demande des en-têtes, vous pouvez créer vos propres en-têtes lorsque vous faites XmlHttpRequests.

var request = new XMLHttpRequest();
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
request.open("GET", path, true);
request.send(null);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X