Leider gibt es keine API, mit der Sie die HTTP-Antwortheader für Ihre erste Seitenanforderung erhalten. Das war die ursprüngliche Frage, die hier gestellt wurde. Es wurde auch wiederholt gefragt , weil einige Leute die tatsächlichen Antwortheader der ursprünglichen Seitenanforderung erhalten möchten, ohne eine andere auszugeben.
Für AJAX-Anfragen:
Wenn eine HTTP-Anfrage über AJAX gestellt wird, können die Antwortheader mit der getAllResponseHeaders()
Methode abgerufen werden. Es ist Teil der XMLHttpRequest-API. Um zu sehen, wie dies angewendet werden kann, überprüfen Sie die folgende fetchSimilarHeaders()
Funktion. Beachten Sie, dass dies eine Problemumgehung ist, die für einige Anwendungen nicht zuverlässig ist.
myXMLHttpRequest.getAllResponseHeaders();
Dies gibt Ihnen keine Informationen über die HTTP-Antwortheader der ursprünglichen Seitenanforderung, kann jedoch verwendet werden, um fundierte Vermutungen über diese Header anzustellen. Mehr dazu wird als nächstes beschrieben.
Abrufen von Header-Werten aus der anfänglichen Seitenanforderung:
Diese Frage wurde vor einigen Jahren zum ersten Mal gestellt und speziell gefragt, wie die ursprünglichen HTTP-Antwortheader für die aktuelle Seite (dh dieselbe Seite, auf der das Javascript ausgeführt wurde) abgerufen werden können. Dies ist eine ganz andere Frage als nur das Abrufen der Antwortheader für eine HTTP-Anforderung. Bei der ersten Seitenanforderung stehen die Header für Javascript nicht ohne weiteres zur Verfügung. Ob die von Ihnen benötigten Header-Werte zuverlässig und ausreichend konsistent sind, wenn Sie dieselbe Seite erneut über AJAX anfordern, hängt von Ihrer speziellen Anwendung ab.
Im Folgenden finden Sie einige Vorschläge, um dieses Problem zu umgehen.
1. Anfragen zu Ressourcen, die weitgehend statisch sind
Wenn die Antwort weitgehend statisch ist und sich die Header zwischen den Anforderungen voraussichtlich nicht wesentlich ändern, können Sie eine AJAX-Anforderung für dieselbe Seite stellen, auf der Sie sich gerade befinden, und davon ausgehen, dass es sich um dieselben Werte handelt, die Teil der Seiten waren HTTP-Antwort. Auf diese Weise können Sie mithilfe der oben beschriebenen netten XMLHttpRequest-API auf die benötigten Header zugreifen.
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 Anforderungen konsistent sind, da Sie nicht vollständig garantieren können, dass sie gleich sind. Es hängt von Ihrer spezifischen Anwendung ab und davon, ob Sie wissen, dass sich der von Ihnen benötigte Wert nicht von einer Anfrage zur nächsten ändert.
2. Schlüsse ziehen
Es gibt einige Stücklisteneigenschaften (Browserobjektmodell), die der Browser anhand der Überschriften ermittelt. Einige dieser Eigenschaften spiegeln HTTP-Header direkt wider (z. B. navigator.userAgent
wird der Wert des HTTP- User-Agent
Headerfelds festgelegt). Durch Durchsuchen der verfügbaren Eigenschaften können Sie möglicherweise das finden, was Sie benötigen, oder einige Hinweise, die angeben, was die HTTP-Antwort enthielt.
3. Verstauen Sie sie
Wenn Sie die Serverseite steuern, können Sie auf jeden beliebigen Header zugreifen, während Sie die vollständige Antwort erstellen. Werte können mit der Seite an den Client übergeben, in einem Markup oder möglicherweise in einer Inline-JSON-Struktur gespeichert werden. Wenn Sie möchten, dass jeder HTTP-Anforderungsheader für Ihr Javascript verfügbar ist, können Sie ihn auf dem Server durchlaufen und als versteckte Werte im Markup zurücksenden. Es ist wahrscheinlich nicht ideal, Header-Werte auf diese Weise zu senden, aber Sie können dies sicherlich für den spezifischen Wert tun, den Sie benötigen. Diese Lösung ist wohl auch ineffizient, aber sie würde den Job machen, wenn Sie sie brauchen.