É possível evitar que o navegador siga redirecionamentos ao enviar XMLHttpRequest-s (ou seja, obter o código de status de redirecionamento de volta e tratá-lo sozinho)?
112
É possível evitar que o navegador siga redirecionamentos ao enviar XMLHttpRequest-s (ou seja, obter o código de status de redirecionamento de volta e tratá-lo sozinho)?
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
emanual
, 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:Você não obterá o código de status, mas encontrará o novo URL sem baixar a página inteira dele.
fonte
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 -> HTTPSVocê 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.
fonte
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.
fonte