Pergunta

O que é a diferença entre Server.Transfer e Response.Redirect?

  • Quais são as vantagens e desvantagens de cada um?
  • Quando é mais adequado sobre o outro?
  • Quando é um não apropriado?
Foi útil?

Solução

Response.Redirect simplesmente envia uma mensagem (HTTP 302) para baixo para o navegador.

Server.Transfer acontece sem o navegador saber nada, a pedido do browser uma página, mas o servidor retorna o conteúdo de outro.

Outras dicas

Response.Redirect() vai mandar você para uma nova página, atualizar a barra de endereços e adicioná-lo ao histórico do navegador. Em seu navegador, você pode clicar novamente.

Server.Transfer() não muda a barra de endereços. Você não pode bater de volta.

Eu uso Server.Transfer() quando eu não quero o usuário para ver onde estou indo. Às vezes em uma página tipo de "carregamento".

Caso contrário, eu sempre vou usar Response.Redirect().

Para ser breve: Response.Redirect simplesmente diz ao navegador para visitar outra página. Server.Transfer ajuda a reduzir solicitações do servidor, mantém o URL do mesmo e, com um pouco bug-bashing, permite transferir as cordas e forma variáveis ??de consulta.

Algo que eu encontrei e concorda com ( fonte ):

Server.Transfer está em semelhante que envia o utilizador para outra página com uma declaração como Server.Transfer("WebForm2.aspx"). Contudo, a declaração tem uma série de vantagens e desvantagens distintas.

Em primeiro lugar, a transferência para outra página usando Server.Transfer conserva os recursos do servidor. Em vez de dizer que o navegador redirecionamento, ele simplesmente muda o "foco" no servidor Web e transfere o pedido. Isto significa que você não ficar muito como muitos HTTP pedidos que vem através, o que, portanto, alivia a pressão sobre o seu servidor web e faz suas aplicações correr mais rápido.

Mas cuidado: porque o processo de "transferência" pode trabalhar em apenas aqueles sites rodando no servidor; você não pode usar Server.Transfer para enviar o usuário para um site externo. Apenas Response.Redirect pode fazer isso.

Em segundo lugar, Server.Transfer mantém a URL original no navegador. Isso pode realmente ajudar as técnicas de entrada de dados aerodinâmica, embora possa para fazer confusão quando a depuração.

Isso não é tudo: O método Server.Transfer também tem uma segunda parameter- "preserveForm". Se você definir esse para True, usando uma instrução tais como Server.Transfer("WebForm2.aspx", True), a consulta existente cordas e qualquer forma variáveis ??ainda estará disponível para a página que você está transferindo a.

Por exemplo, se o seu WebForm1.aspx tem um controle TextBox chamado TextBox1 e você transferido para WebForm2.aspx com o preserveForm parâmetro definido como verdadeiro, você seria capaz de recuperar o valor do controle original página TextBox referenciando Request.Form("TextBox1").

Response.Redirect() deve ser usado quando:

  • queremos redirecionar a solicitação para algumas páginas HTML simples no nosso servidor ou para algum outro servidor web
  • que não se preocupam com causando roundtrips adicionais para o servidor em cada solicitação
  • não precisamos preservar Variáveis ??Cadeia de consulta e formulário de solicitação original
  • queremos que nossos usuários possam ver o novo URL redirecionada onde ele é redirecionado no seu navegador (e ser capaz de marcá-la se o seu necessário)

Server.Transfer() deve ser usado quando:

  • queremos transferir solicitação de página atual para outra página aspx no mesmo servidor
  • queremos preservar os recursos do servidor e evitar as idas e voltas desnecessárias ao servidor
  • queremos preservar seqüência de consulta e formulário Variáveis ??(opcionalmente)
  • não precisamos para mostrar a URL real onde nós redirecionada a solicitação no Navegador de usuários Web

Response.Redirect redireciona página para outra página depois primeira página chega ao cliente. Então cliente sabe o redirecionamento.

Server.Transfer sai de execução atual da página. Cliente não sabe o redirecionamento. Ele permite que você transfira as cordas e forma variáveis ??de consulta.

Por isso, depende de suas necessidades para escolher o que é melhor.

enter descrição da imagem aqui

"response.redirect" e "server.transfer" ajuda a transferir usuário de uma página para outra página enquanto a página está em execução. Mas a maneira que eles fazem esta transferência / redirecionamento é muito diferente.

Caso você esteja cara visual e gostaria ver a demonstração em vez de teoria, eu sugeriria para ver o vídeo abaixo facebook que explica a diferença de uma forma mais demonstrativo.

https://www.facebook.com/photo.php?v=762186150488997

A principal diferença entre eles é que faz a transferência. Em "response.redirect" a transferência é feita pelo navegador, enquanto em "server.transfer" é feito pelo servidor. Vamos tentar entender essa declaração em um detalhe forma mais.

Em "Server.Transfer" seguinte é a seqüência de como transferência acontece: -

1.User 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.Server inicia a execução "Webform1" e o ciclo de vida da página começa. Mas antes que o ciclo de vida completo da página é concluída “server.transfer” acontece "WebForm2".

3. "Webform2" objeto página é criada, cheia ciclo de vida da página é executado e resposta HTML de saída é então enviado para o navegador.

enter descrição da imagem aqui

Enquanto em "Response.Redirect" seguinte é a seqüência de eventos para a navegação: -

1.Client (browser) envia uma solicitação para uma página. Na figura abaixo, a solicitação é enviada para "WebForm1" e gostaríamos de navegar para "Webform2".

ciclo 2.Life de arranques "Webform1" execução. Mas entre o ciclo de vida "Response.Redirect" acontece.

3.Now em vez de servidor fazendo um redirecionamento, ele envia um comando HTTP 302 para o navegador. Este comando informa ao navegador que ele tem que 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".

enter descrição da imagem aqui

Em outras palavras "Server.Transfer" é executado pelo servidor enquanto "Response.Redirect" é executado por thr browser. necessidades "Response.Redirect" a dois pedidos a fazer um redirecionamento da página.

Assim, quando usar "Server.Transfer" e quando usar "Response.Redirect"?

Use "Server.Transfer" quando você quer páginas Navegar que residem no mesmo servidor, use "Response.Redirect" quando você quer navegar entre as páginas que reside em diferentes servidor e domínio.

enter descrição da imagem aqui

Abaixo está uma tabela de resumo dos quais giz as diferenças e em que cenário de uso.

enter descrição da imagem aqui

A beleza de Server.Transfer é o que você pode fazer com ele:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

Você pode obter qualquer coisa de sua página anterior usando o método acima, desde que você usar Server.Transfer, mas não Response.Redirect

Além de comentário de ScarletGarden, você também precisa considerar o impacto dos motores de busca e seu redirecionamento. Tem desta página mudou-se permanentemente? Temporariamente? Ele faz a diferença.

ver: Response.Redirect vs. "301 movido permanentemente" :

Todos nós já utilizado Response.Redirect em uma vez ou outra. É a rápida e maneira fácil de obter visitantes apontou na direção certa se eles de alguma forma acabar no lugar errado. Mas você sei que Response.Redirect envia uma código de status de resposta HTTP de "302 Encontrado" quando você pode realmente quer enviar "301 movido permanentemente"?

A distinção parece pequena, mas em determinados casos, pode realmente fazer uma grande diferença. Por exemplo, se você usar uma resposta "301 movido permanentemente" código, a maioria dos motores de busca irá remover o link desatualizado de seu índice e substituí-lo por um novo. Se vocês usar "302 Found", eles vão continuar retornando para a página antiga ...

Transfer é inteiramente do lado do servidor. Cliente estadias barra de endereços constante. Alguma complexidade sobre a transferência de contexto entre os pedidos. Rubor e reiniciar manipuladores página pode ser caro para fazer sua transferência no início do gasoduto por exemplo em um módulo HTTP durante BeginRequest. Leia a documentação do MSDN cuidadosamente, e testar e entender os novos valores de HttpContext.Request - especialmente em cenários Postback. Normalmente, usamos Server.Transfer para cenários de erro.

Redirect termina o pedido com um 302 status e do lado do cliente de resposta de ida e volta com e come internamente uma exceção (servidor menor perf hit - depende quantos você faz um dia) Cliente, em seguida, navega para novo endereço. de endereço do navegador bar e história atualizações etc. cliente paga o custo de uma viagem extra - custo varia dependendo da latência. Em nosso negócio nós redirecionamos muito nós escrevemos nosso próprio módulo para evitar o custo exceção.

Response.Redirect é mais caro, uma vez que adiciona uma viagem extra para o servidor para descobrir para onde ir.

Server.Transfer é mais eficiente no entanto, pode ser um pouco não mis-líderes para o usuário uma vez que a URL não mudar fisicamente.

Na minha experiência, a diferença de desempenho não foi significativo o suficiente para usar a última abordagem

Existem muitas diferenças, conforme especificado acima. Além de acima de tudo, não há mais uma diferença. Response.Redirect() pode ser usado para usuário redirecionamento para qualquer página que não faz parte da aplicação, mas Server.Transfer() só pode ser usado para o usuário redirecionamento dentro do aplicativo.

//This will work.
Response.Redirect("http://www.google.com");

//This will not work.
Server.Transfer("http://www.google.com");

Server.Transfer não muda a URL no navegador do cliente, de forma eficaz 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, de modo a url nas mudanças da barra de título.

Server.Transfer é ligeiramente mais rápido uma vez que evita uma ida e volta para o servidor, mas a não-mudança de url pode ser bom 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, em seguida, inicia outro pedido para a nova página carregar seu conteúdo no navegador. Isso resulta em dois pedidos do browser.

Server.Transfer: Ele transfere a execução da primeira página para a segunda página no servidor. Na medida em que o cliente do navegador está em causa, fez um pedido ea página inicial é a única resposta com o conteúdo. A vantagem dessa abordagem é uma viagem de menos rodada para o servidor a partir do navegador do cliente. Além disso, todas as variáveis ??de formulário enviado e parâmetros de string de consulta estão disponíveis para a segunda página também.

Apenas mais detalhes sobre Transferência (), é realmente é Server.Execute () + Response.End (), seu código fonte está abaixo (a partir 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 é executado é o manipulador do caminho dado, veja

ASP.NET não verifica se o usuário atual está autorizado a ver o recurso entregue pelo Executar método. Embora a autorização ASP.NET e executa a lógica de autenticação antes do manipulador de recursos original é chamada, ASP.NET chama diretamente o manipulador indicado pelo Executar método e não faz a autenticação reprise e lógica de autorização para o novo recurso. Se a política de segurança do seu aplicativo requer que os clientes têm autorização apropriada para acessar o recurso, o aplicativo deve forçar reauthorization ou fornecem um mecanismo personalizado de controle de acesso.

Você pode forçar reauthorization, usando o Redirect método em vez do Executar método. Redirect executa um redirecionamento do lado do cliente em que o navegador solicita o novo recurso. Porque esse redirecionamento é uma nova solicitação de entrada no sistema, ele é submetido a toda a autenticação e autorização lógica de ambos Internet Information Services (IIS) e política de segurança ASP.NET.

- do MSDN

Response.Redirect envolve uma ida e volta extra e atualiza a barra de endereços.

Server.Transfer não causa a barra de endereços para mudar, as responde de servidor para a solicitação com o conteúdo de outra página

por exemplo.

Response.Redirect: -

  1. No cliente o navegador solicita uma página http: //InitiallyRequestedPage.aspx
  2. no responde servidor para a solicitação com 302 passando o endereço de redirecionamento http:. //AnotherPage.aspx
  3. No cliente o navegador faz um segundo pedido para o endereço http:. //AnotherPage.aspx
  4. no responde servidor com conteúdo de http: //AnotherPage.aspx

Server.Transfer: -

  1. No navegador do cliente solicita uma página http: //InitiallyRequestedPage.aspx
  2. No servidor Server.Transfer para http: //AnotherPage.aspx
  3. No servidor a resposta é feita para o pedido de http: //InitiallyRequestedPage.aspx passando conteúdo de volta a partir de http: //AnotherPage.aspx

Response.Redirect

Pros: - RESTful - Muda a barra de endereços, o endereço pode ser usado para registrar as mudanças de estado no meio destes pedidos.

Contras: - Lento - Há um extra de ida e volta entre o cliente eo servidor. Isto pode ser caro quando há latência substancial entre o cliente eo servidor.

Server.Transfer

Pros: - Rápida.

Contras: - Estado perdeu - Se você estiver usando Server.Transfer para alterar o estado da aplicação em resposta às costas post, se a página é então recarregado esse estado será perdido, como a barra de endereços será a mesma que era na primeira solicitação.

Response.Redirect Response.Redirect () irá enviar-lhe uma nova página, atualizar a barra de endereços e adicioná-lo ao histórico do navegador. Em seu navegador, você pode clicar para trás. Ele redireciona a solicitação para algumas páginas HTML simples no nosso servidor ou para algum outro servidor web. Isso faz com que os circuitos adicionais para o servidor em cada solicitação. Ele não preserva Cadeia de consulta e formulário Variáveis ??da solicitação original. Ele permite ver o novo URL redirecionada onde é redirecionada no navegador (e ser capaz de marcá-la se for necessário). Resposta. Redirect simplesmente envia uma mensagem para baixo para o navegador (HTTP 302).

Server.Transfer O Server.Transfer () não alterar a barra de endereços, podemos não acertar back.One deve usar Server.Transfer () quando ele / ela não quer que o usuário para ver onde ele está indo. Algum tempo em uma página tipo de "carregamento". Ele transfere solicitação de página atual para outra página aspx no mesmo servidor. Ele preserva os recursos do servidor e evita as idas e voltas desnecessárias ao servidor. Conserva Cadeia de consulta e variáveis ??de formulário (opcionalmente). Ele não mostra o URL real onde ele redireciona o pedido no Navegador de usuários da Web. Server.Transfer acontece sem o navegador saber nada, a pedido do browser uma página, mas o servidor retorna o conteúdo de outro.

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