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)?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top