Leider gibt es keine API, die Ihnen die HTTP-Antwort-Header für Ihre erste Seitenanfrage liefert. Das war die ursprüngliche Frage, die hier gestellt wurde. Sie wurde wiederholt gefragt auch, weil manche Leute die tatsächlichen Antwort-Header der ursprünglichen Seitenanforderung erhalten möchten, ohne eine weitere Anfrage zu stellen.
Für AJAX-Anfragen:
Wenn eine HTTP-Anfrage über AJAX gestellt wird, ist es möglich, die Antwort-Header mit der getAllResponseHeaders()
Methode. Sie ist Teil der XMLHttpRequest-API. Um zu sehen, wie dies angewendet werden kann, sehen Sie sich die fetchSimilarHeaders()
Funktion unten. Beachten Sie, dass dies eine Umgehung des Problems ist, die für einige Anwendungen nicht zuverlässig ist.
myXMLHttpRequest.getAllResponseHeaders();
Dadurch erhalten Sie keine Informationen über die HTTP-Antwort-Header der ursprünglichen Seitenanforderung, aber Sie können damit fundierte Vermutungen darüber anstellen, was diese Header waren. Mehr dazu wird im nächsten Abschnitt beschrieben.
Abrufen von Kopfzeilenwerten aus dem Initial Page Request:
Diese Frage wurde erstmals vor einigen Jahren gestellt, und zwar mit der Frage, wie man an die ursprünglichen HTTP-Antwort-Header für die aktuelle Seite (d.h. dieselbe Seite, auf der das Javascript ausgeführt wurde). Dies ist eine ganz andere Frage als einfach immer die Antwort-Header für jede HTTP-Anfrage. Für die erste Seitenanforderung sind die Header für Javascript nicht ohne weiteres verfügbar. Ob die Header-Werte, die Sie benötigen, zuverlässig und ausreichend konsistent sind, wenn Sie die gleiche Seite erneut über AJAX anfordern, hängt von Ihrer speziellen Anwendung ab.
Im Folgenden finden Sie einige Vorschläge, wie Sie dieses Problem umgehen können.
1. Anfragen zu Ressourcen, die weitgehend statisch sind
Wenn die Antwort weitgehend statisch ist und sich die Kopfzeilen zwischen den Anfragen kaum ändern, können Sie eine AJAX-Anfrage für dieselbe Seite stellen, auf der Sie sich gerade befinden, und davon ausgehen, dass es sich um dieselben Werte handelt, die Teil der HTTP-Antwort der Seite waren. Dies könnte Ihnen den Zugriff auf die benötigten Header mit der oben beschriebenen XMLHttpRequest-API ermöglichen.
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);
}
Dieser Ansatz ist problematisch, wenn Sie sich wirklich darauf verlassen müssen, dass die Werte zwischen den Anfragen konsistent sind, da Sie nicht vollständig garantieren können, dass sie identisch sind. Es hängt von Ihrer spezifischen Anwendung ab und davon, ob Sie wissen, dass sich der benötigte Wert nicht von einer Anfrage zur nächsten ändert.
2. Schlüsse ziehen
Es gibt einige Stücklisteneigenschaften (Browser Object Model), das der Browser anhand der Kopfzeilen bestimmt. Einige dieser Eigenschaften spiegeln HTTP-Header direkt wider (z. B. navigator.userAgent
wird auf den Wert der HTTP User-Agent
Kopffeld). Wenn Sie in den verfügbaren Eigenschaften herumschnüffeln, können Sie vielleicht das finden, was Sie brauchen, oder einige Hinweise darauf, was die HTTP-Antwort enthält.
3. Verstecken Sie sie
Wenn Sie die Serverseite kontrollieren, können Sie auf jede beliebige Kopfzeile zugreifen, während Sie die vollständige Antwort erstellen. Die Werte können mit der Seite an den Client weitergegeben werden, in einem Markup oder vielleicht in einer inline JSON-Struktur versteckt werden. Wenn Sie jeden HTTP-Anfrage-Header für Ihr Javascript verfügbar haben wollen, könnten Sie sie auf dem Server durchgehen und als versteckte Werte im Markup zurücksenden. Es ist wahrscheinlich nicht ideal, um Header-Werte auf diese Weise zu senden, aber Sie könnten sicherlich tun es für den spezifischen Wert, den Sie benötigen. Diese Lösung ist wohl auch ineffizient, aber es würde die Arbeit tun, wenn Sie es brauchen.