Infelizmente, não há uma API para fornecer os cabeçalhos de resposta HTTP para sua solicitação de página inicial. Essa foi a pergunta original postada aqui. Também foi solicitado repetidamente , porque algumas pessoas gostariam de obter os cabeçalhos de resposta reais da solicitação de página original sem emitir outro.
Para solicitações AJAX:
Se uma solicitação HTTP for feita sobre AJAX, é possível obter os cabeçalhos de resposta com o getAllResponseHeaders()
método Faz parte da API XMLHttpRequest. Para ver como isso pode ser aplicado, confira a fetchSimilarHeaders()
função abaixo. Observe que esta é uma solução alternativa para o problema que não será confiável para alguns aplicativos.
myXMLHttpRequest.getAllResponseHeaders();
Isso não fornecerá informações sobre os cabeçalhos de resposta HTTP da solicitação de página original, mas pode ser usado para fazer palpites sobre o que esses cabeçalhos eram. Mais sobre isso é descrito a seguir.
Obtendo valores de cabeçalho da solicitação de página inicial:
Esta pergunta foi feita pela primeira vez há vários anos, perguntando especificamente sobre como obter os cabeçalhos de resposta HTTP originais da página atual (ou seja, a mesma página dentro da qual o javascript estava sendo executado). Essa é uma pergunta bem diferente do que simplesmente obter os cabeçalhos de resposta para qualquer solicitação HTTP. Para a solicitação inicial da página, os cabeçalhos não estão prontamente disponíveis para javascript. Se os valores de cabeçalho que você precisa serão confiáveis e suficientemente consistentes se você solicitar a mesma página novamente via AJAX dependerá do seu aplicativo específico.
A seguir, são apresentadas algumas sugestões para solucionar esse problema.
1. Solicitações de recursos amplamente estáticos
Se a resposta for basicamente estática e não for esperado que os cabeçalhos mudem muito entre as solicitações, você poderá fazer uma solicitação AJAX para a mesma página em que está atualmente e assumir que são os mesmos valores que faziam parte da página Resposta HTTP. Isso pode permitir que você acesse os cabeçalhos necessários usando a agradável API XMLHttpRequest descrita acima.
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);
}
Essa abordagem será problemática se você realmente precisar confiar nos valores consistentes entre solicitações, pois não poderá garantir totalmente que eles são os mesmos. Vai depender do seu aplicativo específico e se você sabe que o valor necessário é algo que não será alterado de uma solicitação para a seguinte.
2. Faça Inferências
Existem algumas propriedades da lista técnica (modelo de objeto do navegador) que o navegador determina observando os cabeçalhos. Algumas dessas propriedades refletem os cabeçalhos HTTP diretamente (por exemplo, navigator.userAgent
são definidos como o valor do User-Agent
campo do cabeçalho HTTP ). Ao examinar as propriedades disponíveis, você poderá encontrar o que precisa ou algumas dicas para indicar o que a resposta HTTP continha.
3. Esconda-os
Se você controlar o lado do servidor, poderá acessar qualquer cabeçalho que desejar ao criar a resposta completa. Os valores podem ser passados para o cliente com a página, armazenados em alguma marcação ou talvez em uma estrutura JSON embutida. Se você quiser ter todos os cabeçalhos de solicitação HTTP disponíveis para o seu javascript, poderá iterá-los no servidor e enviá-los de volta como valores ocultos na marcação. Provavelmente não é ideal enviar valores de cabeçalho dessa maneira, mas você certamente poderia fazê-lo com o valor específico necessário. Essa solução também é ineficiente, mas funcionaria se você precisasse.