Pergunta

Preciso redirecionar o usuário de uma página para outra, mas preciso manter a string do referente original. Então, por exemplo, se eles começarem http://www.othersite.com/pagea.jsp, clique em um link que os leva a http://www.mysite.com/pageb.jsp, que então executa um redirecionamento de 302 para http://www.mysite.com/pagec.jsp, Eu preciso da sequência do referente para conter "http://www.othersite.com/pagea.jsp"

Esse é o comportamento normal para um redirecionamento de 302? Ou meu referente original seria descartado, a favor de "http://www.mysite.com/pageb.jsp"? Isso não seria desejável.

Não sei se isso faz alguma diferença, mas estou trabalhando no JSP e estou usando o Response.SendRedirect () para executar o redirecionamento 302.

Devo mencionar que fiz um experimento com isso, e parece ter mantido a string original do referente ("http://www.othersite.com/pagea.jsp") Mas eu só queria ter certeza de que esse era o comportamento padrão normal, e não algo estranho do meu lado.

Obrigado pela ajuda.

Editado para adicionar:

Embora esteja atualmente usando um redirecionamento de 302, provavelmente poderia usar um redirecionamento 301. Você sabe se o comportamento de 301 redirecionamentos é mais confiável?

Foi útil?

Solução

Resposta curta é que não é especificada no RFC 2616 relevante http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html#sec14.36 para o cabeçalho do referente ou o código de status 302.

Sua melhor aposta é fazer um teste com vários navegadores e ver se há um comportamento de consenso.

Para cinto e aparelho completo, codifique o referenciador original no URL de redirecionamento para garantir que a recupere.

Outras dicas

Não sei sobre o 302, mas testei o 301 em alguns navegadores hoje, aqui os resultados:

CENÁRIO: O usuário clica em link no DomAinx que aponta para Domaina. Domaina faz um redirecionamento 301 para o domainb.

  • Ie8 referer Quando o pouso no domainb é: DomAinx (mesmo quando usa a navegação no privato e mesmo quando o usuário abre o link na nova guia)
  • Safari4 referer Quando o pouso no domainb é: Domainx (mesmo quando o usuário abre o link na nova guia)
  • FF3.6.10 referer Quando o pouso no domainb é: Domainx (mesmo quando o usuário abre o link na nova guia)
  • Chrome5 referer Quando pousar no domainb é: domaintx (a não ser que O usuário abre links na nova guia)
  • Chrome26 referer Quando o pouso no domainb é: DomAinx (mesmo quando o usuário abre links na nova guia)

Boa pergunta. Nesse caso, o envio do referente depende inteiramente do navegador (porque o navegador é instruído a fazer outra solicitação ao novo recurso).

RFC 2616 permanece em silêncio sobre o problema:

O recurso solicitado reside temporariamente sob um URI diferente. Como o redirecionamento pode ser alterado de vez em quando, o cliente deve continuar usando o Solicitação-URI para solicitações futuras. Essa resposta é apenas em cache se indicada por um controle de cache ou expire o campo de cabeçalho.

Eu não confiaria no navegador para enviar o referente certo. Aposto que há pelo menos um que envia algo diferente dos outros.

Gambiarra

Se puder, por que não adicionar um ?override_referer=<old_url> Parâmetro para o URL para o qual você redireciona e analise esse valor em vez de http_referer.

Dessa forma, você pode sempre obter o resultado certo e não está perdendo nada em segurança: o referente pode ser falsificado de qualquer maneira.

Eu tive o problema oposto: eu queria que esse referente fosse "PageB", mas nenhum dos navegadores de curentes procede dessa maneira ...

Então eu tentei com um redirecionamento HTML na PageB (em vez de redirecionamento 301 ou 302):

<meta http-equiv="refresh" content="0; url=pageC.jsp" />

E o resultado foi surpreendente:

  • O referente é PageB com Chrome
  • O referente está vazio com o Firefox e o IE!

Espero que isso possa ajudar

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