Respostas:
Não de acordo com o padrão W3C para o objeto XMLHttpRequest (ênfase adicionada):
Se a resposta for um redirecionamento HTTP:
Se a origem da URL transmitida pelo cabeçalho Location for a mesma origem da origem XMLHttpRequest e o redirecionamento não violar as precauções de loop infinito, siga o redirecionamento de forma transparente enquanto observa as regras de evento de solicitação de mesma origem.
Eles estavam considerando isso para um lançamento futuro:
Esta especificação não inclui os seguintes recursos que estão sendo considerados para uma versão futura desta especificação:
- Propriedade para desativar os seguintes redirecionamentos;
mas a especificação mais recente não menciona mais isso.
O novo Fetch API suporta 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ê apenas pode interromper o redirecionamento em si, e então parecerá um erro (resposta vazia). Se isso é tudo de que você precisa, você está pronto 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 estão agora.
Quanto a XMLHttpRequest, você pode acessar HEAD
o servidor e inspecionar se o 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 obterá o código de status, mas encontrará o novo URL sem baixar a página inteira dele.
OPTIONS
pode ser uma escolha melhor, de qualquer forma, só funciona para fins não gerais, etc. o administrador configurou o redirecionamento de todo o site / esquema, como HTTP -> HTTPS
Você pode usar a responseURL
propriedade para obter o destino de redirecionamento ou verificar se a resposta foi finalmente obtida de um local que você aceita.
Isso, é claro, significa que o resultado é obtido de qualquer maneira, mas pelo menos você pode obter as informações necessárias sobre o destino do redirecionamento e, por exemplo, detectar condições em que deseja descartar a resposta.
Não, você não existe nenhum lugar na API exposto por XMLHttpRequest que permite que você substitua seu comportamento padrão de seguir um 301 ou 302 automaticamente.
Se o cliente estiver executando o IE no Windows, você poderá usar o WinHTTP para definir uma opção para evitar esse comportamento, mas essa é uma solução muito limitadora.