Malheureusement, il n'y a pas d'API pour vous donner les en-têtes de réponse HTTP pour votre demande de page initiale. C'était la question originale affichée ici. Il a également été demandé à plusieurs reprises , car certaines personnes souhaiteraient obtenir les en-têtes de réponse réels de la demande de page d'origine sans en émettre un autre.
Pour les demandes AJAX:
Si une requête HTTP est effectuée sur AJAX, il est possible d'obtenir les en-têtes de réponse avec la getAllResponseHeaders()
méthode. Cela fait partie de l'API XMLHttpRequest. Pour voir comment cela peut être appliqué, consultez la fetchSimilarHeaders()
fonction ci-dessous. Notez qu'il s'agit d'une solution de contournement au problème qui ne sera pas fiable pour certaines applications.
myXMLHttpRequest.getAllResponseHeaders();
Cela ne vous donnera pas d'informations sur les en-têtes de réponse HTTP de la demande de page d'origine, mais cela pourrait être utilisé pour faire des suppositions éclairées sur ce que ces en-têtes étaient. Plus d'informations à ce sujet sont décrites ci-dessous.
Obtention des valeurs d'en-tête à partir de la demande de page initiale:
Cette question a été posée pour la première fois il y a plusieurs années, demandant spécifiquement comment obtenir les en-têtes de réponse HTTP d'origine pour la page actuelle (c'est-à-dire la même page à l'intérieur de laquelle le javascript était en cours d'exécution). C'est une question très différente de la simple obtention des en-têtes de réponse pour toute requête HTTP. Pour la demande de page initiale, les en-têtes ne sont pas facilement disponibles en javascript. Si les valeurs d'en-tête dont vous avez besoin seront fiables et suffisamment cohérentes si vous demandez à nouveau la même page via AJAX, cela dépendra de votre application particulière.
Voici quelques suggestions pour contourner ce problème.
1. Demandes de ressources largement statiques
Si la réponse est en grande partie statique et que les en-têtes ne devraient pas changer beaucoup entre les demandes, vous pouvez faire une demande AJAX pour la même page sur laquelle vous êtes actuellement et supposer que ce sont les mêmes valeurs qui faisaient partie des pages. Réponse HTTP. Cela pourrait vous permettre d'accéder aux en-têtes dont vous avez besoin en utilisant la belle API XMLHttpRequest décrite ci-dessus.
function fetchSimilarHeaders (callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === XMLHttpRequest.DONE) {
//
// 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 sera problématique si vous devez vraiment vous fier aux valeurs cohérentes entre les demandes, car vous ne pouvez pas garantir qu'elles sont identiques. Cela dépendra de votre application spécifique et si vous savez que la valeur dont vous avez besoin est quelque chose qui ne changera pas d'une demande à l'autre.
2. Faire des inférences
Il existe certaines propriétés de nomenclature (Browser Object Model) que le navigateur détermine en regardant les en-têtes. Certaines de ces propriétés reflètent directement les en-têtes HTTP (par exemple, navigator.userAgent
sont définies sur la valeur du User-Agent
champ d'en-tête HTTP ). En reniflant les propriétés disponibles, vous pourrez peut-être trouver ce dont vous avez besoin, ou quelques indices pour indiquer le contenu de la réponse HTTP.
3. Cachez-les
Si vous contrôlez le côté serveur, vous pouvez accéder à tout en-tête que vous aimez pendant que vous construisez la réponse complète. Les valeurs peuvent être transmises au client avec la page, stockées dans un balisage ou peut-être dans une structure JSON intégrée. Si vous souhaitez que chaque en-tête de requête HTTP soit disponible pour votre javascript, vous pouvez les parcourir sur le serveur et les renvoyer en tant que valeurs masqué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 aussi, mais elle ferait l'affaire si vous en aviez besoin.