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?
Server.TransferRequest
vez de Server.Transfer
.
Qual é a diferença entre Server.Transfer
e Response.Redirect
?
Server.TransferRequest
vez de Server.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.
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()
.
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 ):
Server.Transfer
é semelhante, pois envia o usuário para outra página com uma instrução comoServer.Transfer("WebForm2.aspx")
. No entanto, a declaração tem várias vantagens e desvantagens distintas.Em primeiro lugar, a transferência para outra página usando
Server.Transfer
economiza recursos do servidor. Em vez de dizer ao navegador para redirecionar, ele simplesmente altera o "foco" no servidor da Web e transfere a solicitação. Isso significa que você não recebe tantas solicitações HTTP, o que facilita a pressão no servidor da Web e faz com que seus aplicativos sejam executados mais rapidamente.Mas cuidado: porque o processo de "transferência" pode funcionar apenas nos sites em execução no servidor; você não pode usar
Server.Transfer
para enviar o usuário para um site externo. SóResponse.Redirect
pode fazer isso.Em segundo lugar,
Server.Transfer
mantém o URL original no navegador. Isso pode realmente ajudar a simplificar as técnicas de entrada de dados, embora possa causar confusão durante a depuração.Isso não é tudo: o
Server.Transfer
método também possui um segundo parâmetro - "preserveForm". Se você definir isso comoTrue
, usando uma instrução comoServer.Transfer("WebForm2.aspx", True)
, a sequência de consultas existente e quaisquer variáveis de formulário ainda estarão disponíveis para a página para a qual você está transferindo.Por exemplo, se o seu WebForm1.aspx tiver um controle TextBox chamado TextBox1 e você transferir para o WebForm2.aspx com o parâmetro preserveForm definido como True, você poderá recuperar o valor do controle TextBox da página original fazendo referência
Request.Form("TextBox1")
.
maintaining the original URL... ...really help streamline data entry techniques
?
Response.Redirect()
deve ser usado quando:
Server.Transfer()
deve ser usado quando:
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.
Response.Redirect
para carregar a página original mesmo que eu tenha ligado Response.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.
Server.Transfer
: o mesmo servidor ou o mesmo site do IIS ?
A beleza do Server.Transfer é o que você pode fazer com ele:
TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");
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
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" :
Todos nós usamos o Response.Redirect uma vez ou outra. É a maneira rápida e fácil de fazer com que os visitantes apontem na direção certa se, de alguma forma, acabarem no lugar errado. Mas você sabia que o Response.Redirect envia um código de status de resposta HTTP "302 encontrado" quando você realmente deseja enviar "301 movido permanentemente"?
A distinção parece pequena, mas em certos casos pode realmente fazer uma grande diferença. Por exemplo, se você usar um código de resposta "301 movido permanentemente", a maioria dos mecanismos de pesquisa removerá o link desatualizado de seu índice e o substituirá pelo novo. Se você usar "302 encontrado", eles continuarão retornando à página antiga ...
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.
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, mas Server.Transfer()
só pode ser usada para redirecionar o usuário dentro do aplicativo.
//This will work.
Response.Redirect("http://www.google.com");
//This will not work.
Server.Transfer("http://www.google.com");
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
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.
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.
Apenas mais detalhes sobre Transfer (), na verdade é Server.Execute () + Response.End (), seu código-fonte está abaixo (de Mono / .net 4.0):
public void Transfer (string path, bool preserveForm)
{
this.Execute (path, null, preserveForm, true);
this.context.Response.End ();
}
e para Execute (), o que é executar é o manipulador do caminho especificado, consulte
O ASP.NET não verifica se o usuário atual está autorizado a exibir o recurso entregue pelo método Execute . Embora a lógica de autorização e autenticação do ASP.NET seja executada antes que o manipulador de recursos original seja chamado, o ASP.NET chama diretamente o manipulador indicado pelo método Execute e não executa novamente a lógica de autenticação e autorização para o novo recurso. Se a política de segurança do seu aplicativo exigir que os clientes tenham autorização apropriada para acessar o recurso, o aplicativo deverá forçar a nova autorização ou fornecer um mecanismo personalizado de controle de acesso.
Você pode forçar uma nova autorização usando o método Redirect em vez do método Execute . Redirecionar executa um redirecionamento do lado do cliente no qual o navegador solicita o novo recurso. Como esse redirecionamento é uma nova solicitação que entra no sistema, está sujeito a toda a lógica de autenticação e autorização das políticas de segurança dos Serviços de Informações da Internet (IIS) e do ASP.NET.
- do MSDN
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.
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.