Qual é a diferença entre Server.Transfer
e Response.Redirect
?
- Quais são as vantagens e desvantagens de cada um?
- Quando é apropriado um sobre o outro?
- Quando alguém não é apropriado?
asp.net
redirect
server.transfer
kedar kamthe
fonte
fonte
Server.TransferRequest
vez deServer.Transfer
.Respostas:
Response.Redirect
simplesmente envia uma mensagem (HTTP 302) para o navegador.Server.Transfer
acontece sem o navegador saber nada, o navegador solicita uma página, mas o servidor retorna o conteúdo de outra.fonte
Response.Redirect()
enviará você para uma nova página, atualize a barra de endereço e adicione-a ao histórico do navegador. No seu navegador, você pode clicar em voltar.Server.Transfer()
não altera a barra de endereço. Você não pode revidar.Uso
Server.Transfer()
quando não quero que o usuário veja para onde estou indo. Às vezes, em uma página do tipo "carregando".Caso contrário, eu sempre vou usar
Response.Redirect()
.fonte
Para ser breve:
Response.Redirect
basta dizer ao navegador para visitar outra página.Server.Transfer
ajuda a reduzir as solicitações do servidor, mantém a URL a mesma e, com um pouco de correção de erros, permite transferir a string de consulta e as variáveis de formulário.Algo que eu encontrei e concordo ( fonte ):
fonte
maintaining the original URL... ...really help streamline data entry techniques
?Response.Redirect()
deve ser usado quando:Server.Transfer()
deve ser usado quando:fonte
O Response.Redirect redireciona a página para outra página após a primeira página chegar ao cliente. Então, o cliente conhece o redirecionamento.
Server.Transfer encerra a execução atual da página. O cliente não conhece o redirecionamento. Permite transferir a sequência de caracteres de consulta e as variáveis de formulário.
Portanto, depende de suas necessidades para escolher qual é o melhor.
fonte
Response.Redirect
para carregar a página original mesmo que eu tenha ligadoResponse.Redirect
?"response.redirect" e "server.transfer" ajudam a transferir o usuário de uma página para outra enquanto a página estiver em execução. Mas a maneira como eles fazem essa transferência / redirecionamento é muito diferente.
Caso você seja um cara visual e gostaria de ver mais uma demonstração do que uma teoria, sugiro ver o vídeo do facebook abaixo, que explica a diferença de uma maneira mais demonstrativa.
https://www.facebook.com/photo.php?v=762186150488997
A principal diferença entre eles é quem faz a transferência. Em "response.redirect", a transferência é feita pelo navegador, enquanto em "server.transfer", é feita pelo servidor. Vamos tentar entender essa afirmação de maneira mais detalhada.
Em "Server.Transfer", a seguir está a sequência de como a transferência acontece: -
1.O usuário envia uma solicitação para uma página ASP.NET. Na figura abaixo, a solicitação é enviada para "WebForm1" e gostaríamos de navegar para "Webform2".
2.O servidor começa a executar "Webform1" e o ciclo de vida da página é iniciado. Mas antes que o ciclo de vida completo da página seja concluído, "Server.transfer" acontece com "WebForm2".
3. O objeto de página "Webform2" é criado, o ciclo de vida da página inteira é executado e a resposta HTML de saída é enviada ao navegador.
Enquanto em "Response.Redirect", a seguir está a sequência de eventos para navegação: -
1.O cliente (navegador) envia uma solicitação para uma página. Na figura abaixo, a solicitação é enviada para "WebForm1" e gostaríamos de navegar para "Webform2".
2.O ciclo de vida de "Webform1" começa a executar. Mas no meio do ciclo de vida "Response.Redirect" acontece.
3. Agora, em vez de o servidor fazer um redirecionamento, ele envia um comando HTTP 302 para o navegador. Este comando informa ao navegador que ele precisa iniciar uma solicitação GET para a página "Webform2.aspx".
4.Browser interpreta o comando 302 e envia uma solicitação GET para "Webform2.aspx".
Em outras palavras, "Server.Transfer" é executado pelo servidor enquanto "Response.Redirect" é executado pelo navegador thr. "Response.Redirect" precisa de duas solicitações para fazer um redirecionamento da página.
Então, quando usar "Server.Transfer" e quando usar "Response.Redirect"?
Use "Server.Transfer" quando desejar navegar em páginas que residem no mesmo servidor, use "Response.Redirect" quando desejar navegar entre páginas que residem em outro servidor e domínio.
Abaixo está uma tabela resumida da qual destaca as diferenças e em qual cenário usar.
fonte
Server.Transfer
: o mesmo servidor ou o mesmo site do IIS ?A beleza do Server.Transfer é o que você pode fazer com ele:
Você pode obter qualquer coisa da sua página anterior usando o método acima, desde que use Server.Transfer, mas não Response.Redirect
fonte
Além do comentário de ScarletGarden, você também precisa considerar o impacto dos mecanismos de pesquisa e seu redirecionamento. Esta página mudou permanentemente? Temporariamente? Faz diferença.
consulte: Response.Redirect vs. "301 movido permanentemente" :
fonte
A transferência é totalmente do lado do servidor. A barra de endereço do cliente permanece constante. Alguma complexidade sobre a transferência de contexto entre solicitações. Liberar e reiniciar manipuladores de página pode ser caro, assim como sua transferência no início do pipeline, por exemplo, em um HttpModule durante BeginRequest. Leia os documentos do MSDN com atenção, teste e compreenda os novos valores do HttpContext.Request - especialmente em cenários de postagem. Geralmente usamos Server.Transfer para cenários de erro.
O redirecionamento finaliza a solicitação com um status 302 e uma resposta de ida e volta do lado do cliente e recebe internamente uma exceção (desempenho menor do servidor - depende de quantas vezes você faz por dia) O Cliente navega para o novo endereço. Barra de endereços do navegador e atualizações do histórico etc. O cliente paga o custo de uma ida e volta extra - o custo varia dependendo da latência. Em nossos negócios, redirecionamos muito , escrevemos nosso próprio módulo para evitar o custo da exceção.
fonte
Existem muitas diferenças, conforme especificado acima. Além de acima de tudo, há mais uma diferença.
Response.Redirect()
pode ser usado para redirecionar o usuário para qualquer página que não faça parte do aplicativo, masServer.Transfer()
só pode ser usada para redirecionar o usuário dentro do aplicativo.fonte
O Response.Redirect é mais caro, pois adiciona uma viagem extra ao servidor para descobrir para onde ir.
Server.Transfer é mais eficiente, no entanto, pode levar um pouco de erro ao usuário, pois o URL não muda fisicamente.
Na minha experiência, a diferença de desempenho não foi significativa o suficiente para usar a última abordagem
fonte
Server.Transfer não altera a URL no navegador do cliente; portanto, o navegador não sabe que você mudou para outro manipulador do lado do servidor. Response.Redirect diz ao navegador para ir para uma página diferente, para que o URL na barra de título mude.
Server.Transfer é um pouco mais rápido, pois evita uma ida e volta ao servidor, mas a não alteração de URL pode ser boa ou ruim para você, dependendo do que você está tentando fazer.
fonte
Response.Redirect: informa ao navegador que a página solicitada pode ser encontrada em um novo local. O navegador inicia outra solicitação para a nova página carregando seu conteúdo no navegador. Isso resulta em duas solicitações do navegador.
Server.Transfer: Transfere a execução da primeira página para a segunda página no servidor. No que diz respeito ao cliente do navegador, ele fez uma solicitação e a página inicial é a que responde ao conteúdo. O benefício dessa abordagem é menos uma ida e volta ao servidor a partir do navegador do cliente. Além disso, quaisquer variáveis de formulário publicadas e parâmetros de sequência de consulta também estão disponíveis na segunda página.
fonte
Apenas mais detalhes sobre Transfer (), na verdade é Server.Execute () + Response.End (), seu código-fonte está abaixo (de Mono / .net 4.0):
e para Execute (), o que é executar é o manipulador do caminho especificado, consulte
fonte
O Response.Redirect envolve uma viagem de ida e volta extra e atualiza a barra de endereço.
Server.Transfer não faz com que a barra de endereço seja alterada, o servidor responde à solicitação com conteúdo de outra página
por exemplo
Resposta: Redirecionado: -
Server.Transfer: -
Response.Redirect
Prós: - RESTful - Altera a barra de endereço, o endereço pode ser usado para registrar alterações de estado entre solicitações.
Contras: - Lento - Há uma viagem de ida e volta extra entre o cliente e o servidor. Isso pode ser caro quando há uma latência substancial entre o cliente e o servidor.
Server.Transfer
Prós: - Rápido.
Contras: - Estado perdido - Se você estiver usando Server.Transfer para alterar o estado do aplicativo em resposta às postagens, se a página for recarregada, esse estado será perdido, pois a barra de endereço será a mesma de antes. no primeiro pedido.
fonte
Response.Redirect Response.Redirect () o envia para uma nova página, atualiza a barra de endereços e a adiciona ao Histórico do Navegador. No seu navegador, você pode clicar em voltar. Ele redireciona a solicitação para algumas páginas HTML simples em nosso servidor ou para outro servidor web. Causa ida e volta adicionais ao servidor em cada solicitação. Ele não preserva as variáveis de seqüência de caracteres e formulário da consulta da solicitação original. Ele permite ver o novo URL redirecionado para onde ele é redirecionado no navegador (e pode marcar como favorito, se necessário). Resposta. Redirecionar simplesmente envia uma mensagem para o navegador (HTTP 302).
Server.Transfer Server.Transfer () não altera a barra de endereço, não podemos revidar. Deve-se usar Server.Transfer () quando ele / ela não deseja que o usuário veja para onde está indo. Em algum momento em uma página do tipo "carregando". Ele transfere a solicitação de página atual para outra página .aspx no mesmo servidor. Ele preserva os recursos do servidor e evita as viagens de ida e volta desnecessárias para o servidor. Ele preserva as variáveis de sequência e forma de consulta (opcionalmente). Ele não mostra a URL real onde redireciona a solicitação no Navegador da Web dos usuários. Server.Transfer acontece sem que o navegador saiba nada, o navegador solicita uma página, mas o servidor retorna o conteúdo de outra.
fonte