Evitar redirecionamento de XMLHttpRequest
-
03-07-2019 - |
Pergunta
É possível evitar que o navegador seguintes redirecionamentos ao enviar XMLHttpRequest-s (ou seja, para obter o código de volta o status de redirecionamento e manipulá-lo eu mesmo)?
Solução
Não de acordo com o padrão W3C para o XMLHttpRequest objeto (grifo nosso):
Se a resposta for um redirecionamento HTTP:
Se a origem do URL transmitida pelo cabeçalho Localização é mesma origem com a origem XMLHttpRequest eo redirecionamento não viola infinita precauções de alça, transparente seguir o redirecionamento , respeitando as regras pedido de eventos de mesma origem.
Eles foram considerando -lo para um futuro lançamento:
Esta especificação não inclui os seguintes recursos que estão sendo considerada para uma versão futura do esta especificação:
- Propriedade de redirecionamentos desativar seguintes;
mais recente especificação já não menciona isso.
Outras dicas
O novo Fetch suportado pela API diferentes modos de tratamento de redirecionamento : follow
, error
e manual
, mas não consigo encontrar uma maneira de ver o novo URL ou o código de status quando o redirecionamento foi cancelada. Você só pode parar o próprio redirecionamento, e, em seguida, ele se parece com um erro (resposta vazia). Se isso é tudo que você precisa, você é bom para ir. Além disso, você deve estar ciente de que os pedidos feitos através desta API não são canceláveis ?? ainda . Eles são agora.
Quanto XMLHttpRequest, você pode HEAD
o servidor e verifique se a URL mudou:
var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
if (this.readyState === this.DONE) {
console.log(this.responseURL);
}
};
http.send();
Você não terá o código de status, mas vai encontrar o novo URL sem baixar a página inteira com ele.
Você pode usar a propriedade responseURL
para obter o destino de redirecionamento ou verifique se a resposta foi em última análise, obtido a partir de um local que você aceitar.
Isto, obviamente, significa que o resultado é de qualquer maneira improvável, mas pelo menos você pode obter as informações necessárias sobre o destino de redirecionamento e, por exemplo, detectar condições quando você gostaria de descartar a resposta.
Não, você não existe em qualquer lugar do API exposto por XMLHttpRequest que permite substituir o comportamento padrão de seguir um 301 ou 302 automaticamente.
Se o cliente estiver executando o IE no Windows, então você pode usar WinHTTP em vez de definir uma opção para impedir que o comportamento, mas isso é uma solução muito limitante.