Desafortunadamente, no hay una API que le proporcione los encabezados de respuesta HTTP para su solicitud de página inicial. Esa fue la pregunta original publicada aquí. También se ha preguntado repetidamente porque a algunas personas les gustaría obtener los encabezados de respuesta reales de la solicitud de página original sin emitir otro.
Para solicitudes AJAX:
Si se realiza una solicitud HTTP a través de AJAX, es posible obtener los encabezados de respuesta con el getAllResponseHeaders()
método. Es parte de la API XMLHttpRequest. Para ver cómo se puede aplicar esto, consulte la fetchSimilarHeaders()
función a continuación. Tenga en cuenta que esta es una solución al problema que no será confiable para algunas aplicaciones.
myXMLHttpRequest.getAllResponseHeaders();
Esto no le dará información sobre los encabezados de respuesta HTTP de la solicitud de página original, pero podría usarse para hacer conjeturas informadas sobre cuáles eran esos encabezados. Más sobre eso se describe a continuación.
Obtención de valores de encabezado de la solicitud de página inicial:
Esta pregunta se hizo por primera vez hace varios años, preguntando específicamente cómo llegar a los encabezados de respuesta HTTP originales para la página actual (es decir, la misma página dentro de la cual se estaba ejecutando JavaScript). Esta es una pregunta bastante diferente que simplemente obtener los encabezados de respuesta para cualquier solicitud HTTP. Para la solicitud de página inicial, los encabezados no están disponibles para javascript. Si los valores de encabezado que necesita serán confiables y suficientemente consistentes si solicita la misma página nuevamente a través de AJAX, dependerá de su aplicación particular.
Las siguientes son algunas sugerencias para solucionar ese problema.
1. Solicitudes de recursos que son en gran medida estáticos
Si la respuesta es en gran medida estática y no se espera que los encabezados cambien mucho entre solicitudes, puede hacer una solicitud AJAX para la misma página en la que se encuentra actualmente y asumir que son los mismos valores que formaron parte de la página. Respuesta HTTP Esto podría permitirle acceder a los encabezados que necesita utilizando la agradable API XMLHttpRequest descrita anteriormente.
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);
}
Este enfoque será problemático si realmente tiene que confiar en que los valores sean consistentes entre las solicitudes, ya que no puede garantizar completamente que sean los mismos. Dependerá de su aplicación específica y de si sabe que el valor que necesita es algo que no cambiará de una solicitud a la siguiente.
2. Hacer inferencias
Hay algunas propiedades de la lista de materiales (modelo de objetos del navegador) que el navegador determina al observar los encabezados. Algunas de estas propiedades reflejan los encabezados HTTP directamente (por ejemplo, navigator.userAgent
se establece en el valor del User-Agent
campo del encabezado HTTP ). Al rastrear las propiedades disponibles, es posible que pueda encontrar lo que necesita o algunas pistas para indicar qué contenía la respuesta HTTP.
3. Guardarlos
Si controla el lado del servidor, puede acceder a cualquier encabezado que desee mientras construye la respuesta completa. Los valores se pueden pasar al cliente con la página, escondidos en algún marcado o tal vez en una estructura JSON en línea. Si desea tener todos los encabezados de solicitud HTTP disponibles para su javascript, puede iterar a través de ellos en el servidor y enviarlos de regreso como valores ocultos en el marcado. Probablemente no sea ideal enviar valores de encabezado de esta manera, pero ciertamente podría hacerlo por el valor específico que necesita. Podría decirse que esta solución también es ineficiente, pero que haría el trabajo si la necesitara.