Sfortunatamente, non esiste un'API che ti dia le intestazioni di risposta HTTP per la tua richiesta di pagina iniziale. Questa era la domanda originale pubblicata qui. È stato anche chiesto più volte , perché alcune persone vorrebbero ottenere le intestazioni di risposta effettive della richiesta di pagina originale senza emetterne un'altra.
Per richieste AJAX:
Se viene effettuata una richiesta HTTP su AJAX, è possibile ottenere le intestazioni di risposta con il getAllResponseHeaders()
metodo. Fa parte dell'API XMLHttpRequest. Per vedere come può essere applicato, dai un'occhiata alla fetchSimilarHeaders()
seguente funzione. Si noti che questa è una soluzione al problema che non sarà affidabile per alcune applicazioni.
myXMLHttpRequest.getAllResponseHeaders();
Questo non ti darà informazioni sulle intestazioni di risposta HTTP della richiesta della pagina originale, ma potrebbe essere usato per fare ipotesi istruite su quali fossero quelle intestazioni. Ulteriori informazioni verranno descritte di seguito.
Ottenere valori di intestazione dalla richiesta di pagina iniziale:
Questa domanda è stata posta per la prima volta diversi anni fa, chiedendo in particolare come ottenere le intestazioni di risposta HTTP originali per la pagina corrente (ovvero la stessa pagina all'interno della quale era in esecuzione il javascript). Questa è una domanda piuttosto diversa rispetto al semplice ottenere le intestazioni di risposta per qualsiasi richiesta HTTP. Per la richiesta di pagina iniziale, le intestazioni non sono prontamente disponibili per JavaScript. Se i valori di intestazione necessari saranno affidabili e sufficientemente coerenti se si richiede nuovamente la stessa pagina tramite AJAX dipenderà dalla propria applicazione specifica.
Di seguito sono riportati alcuni suggerimenti per aggirare il problema.
1. Richieste di risorse ampiamente statiche
Se la risposta è in gran parte statica e non ci si aspetta che le intestazioni cambino molto tra le richieste, è possibile effettuare una richiesta AJAX per la stessa pagina in cui ci si trova attualmente e supporre che siano gli stessi valori che facevano parte della pagina Risposta HTTP. Ciò potrebbe consentire di accedere alle intestazioni necessarie utilizzando la bella API XMLHttpRequest descritta sopra.
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);
}
Questo approccio sarà problematico se devi veramente fare affidamento sul fatto che i valori siano coerenti tra le richieste, poiché non puoi garantire completamente che siano uguali. Dipenderà dalla tua specifica applicazione e se sai che il valore che ti serve è qualcosa che non cambierà da una richiesta all'altra.
2. Fai Inferenze
Esistono alcune proprietà della distinta componenti (modello a oggetti del browser) che il browser determina osservando le intestazioni. Alcune di queste proprietà riflettono direttamente le intestazioni HTTP (ad es. navigator.userAgent
È impostato sul valore del User-Agent
campo dell'intestazione HTTP ). Annusando le proprietà disponibili potresti essere in grado di trovare ciò di cui hai bisogno o alcuni indizi per indicare cosa conteneva la risposta HTTP.
3. Stash loro
Se controlli il lato server, puoi accedere a qualsiasi intestazione che ti piace mentre costruisci la risposta completa. I valori possono essere passati al client con la pagina, inseriti in un markup o forse in una struttura JSON incorporata. Se si desidera avere tutte le intestazioni delle richieste HTTP disponibili sul proprio javascript, è possibile scorrere attraverso di esse sul server e inviarle come valori nascosti nel markup. Probabilmente non è l'ideale inviare i valori di intestazione in questo modo, ma potresti certamente farlo per il valore specifico di cui hai bisogno. Anche questa soluzione è probabilmente inefficiente, ma farebbe il lavoro se ne avessi bisogno.