Serveur.Transfert Vs.Réponse.Rediriger

Quelle est la différence entre Server.Transfer et Response.Redirect?

  • Quels sont les avantages et les inconvénients de chacun?
  • Quand l'un est-il approprié par rapport à l'autre?
  • Quand est-ce que l'on n'est pas approprié?
248
demandé sur Ian Boyd 2008-10-22 09:34:46

18 réponses

Response.Redirect envoie simplement un message (HTTP 302) vers le navigateur.

Server.Transfer se produit sans que le navigateur ne sache quoi que ce soit, le navigateur demande une page, mais le serveur renvoie le contenu d'une autre.

218
répondu CMS 2015-02-04 16:12:24

Response.Redirect() vous enverra à une nouvelle page, Mettre à jour la barre d'adresse et l'ajouter à l'historique du navigateur. Sur votre navigateur, vous pouvez cliquer sur retour.

Server.Transfer() ne modifie pas la barre d'adresse. Vous ne pouvez pas frapper en retour.

J'utilise Server.Transfer() quand je ne veux pas que l'utilisateur puisse voir où je vais. Parfois sur une page de type "chargement".

Sinon, je vais toujours utiliser Response.Redirect().

88
répondu Christian Payne 2015-02-04 16:13:49

Pour être Court: Response.Redirect indique simplement au navigateur de visiter une autre page. Server.Transfer aide à réduire les requêtes du serveur, maintient L'URL identique et, avec un peu de bug-bashing, vous permet de transférer la chaîne de requête et les variables de formulaire.

Quelque Chose que j'ai trouvé et d'accord avec (source):

Server.Transfer est similaire en ce sens qu'il envoie l'utilisateur à une autre page avec une instruction telle que Server.Transfer("WebForm2.aspx"). Cependant, la déclaration présente un certain nombre d'avantages et d'inconvénients distincts.

Tout d'abord, transférer vers une autre page en utilisant Server.Transfer conserve les ressources du serveur. Au lieu de dire au navigateur de rediriger, il change simplement le "focus" sur le serveur Web et les transferts de la demande. Cela signifie que vous n'obtenez pas autant de HTTP demandes à venir à travers, ce qui soulage donc la pression sur votre Serveur Web et rend vos applications plus rapides.

Mais attention: parce que le processus de "transfert" ne peut fonctionner que sur ceux sites en cours d'exécution sur le serveur; vous impossible d'utiliser Server.Transfer pour envoyer l'utilisateur vers un site externe. Seul Response.Redirect peut le faire.

Deuxièmement, Server.Transfer conserve l'URL d'origine dans le navigateur. Cela peut vraiment aider à rationaliser les techniques de saisie de données, même si cela peut faire pour la confusion lors du débogage.

Ce n'est pas tout: la méthode Server.Transfer a aussi une seconde paramètre - "preserveForm". Si vous définissez ceci sur True, en utilisant une instruction tels que Server.Transfer("WebForm2.aspx", True), la requête existante string et toutes les variables de formulaire seront toujours disponibles à la page que vous transfert à l'.

Par exemple, si votre formulaire Web1.aspx a un contrôle TextBox appelé TextBox1 et vous avez transféré à WebForm2.aspx avec le preserveForm paramètre défini sur True, vous seriez en mesure de récupérer la valeur du contrôle de la zone de texte de la page d'origine par référencement Request.Form("TextBox1").

71
répondu TStamper 2013-08-06 12:50:27

Réponse.Redirection redirige la page vers une autre page après première page arrive au client. Donc, le client connaît la redirection.

Serveur.Transfert quitte l'exécution en cours de la page. Le Client ne connaît pas la redirection. Il vous permet de transférer la chaîne de requête et les variables de formulaire.

Cela dépend donc de vos besoins pour choisir lequel est le meilleur.

28
répondu Canavar 2009-02-06 18:36:15

Response.Redirect() doit être utilisée lorsque:

  • nous voulons rediriger la requête vers des pages HTML simples sur notre serveur ou vers un autre serveur web
  • nous ne nous soucions pas de provoquer des allers-retours supplémentaires au serveur à chaque requête
  • nous n'avons pas besoin de conserver les Variables de chaîne de requête et de formulaire de la requête d'origine
  • nous voulons que nos utilisateurs soient en mesure de voir la nouvelle URL redirigée où il est redirigé dans son navigateur (et être en mesure de le mettre en signet si son nécessaire)

Server.Transfer() doit être utilisée lorsque:

  • nous voulons transférer la demande de page actuelle à une autre.page aspx sur le même serveur
  • , nous voulons préserver les ressources du serveur et éviter les allers-retours inutiles pour le serveur
  • nous voulons conserver les Variables de chaîne de requête et de formulaire (éventuellement)
  • nous n'avons pas besoin d'afficher l'URL réelle où nous avons redirigé la demande dans le navigateur Web des utilisateurs
26
répondu SoftDev 2015-09-29 15:43:00

entrez la description de l'image ici

"réponse.rediriger " et " serveur.transfert " permet de transférer l'utilisateur d'une page à une autre page pendant l'exécution de la page. Mais la façon dont ils font ce transfert / redirection est très différente.

Dans le cas où vous êtes un gars visuel et que vous aimeriez voir une démonstration plutôt qu'une théorie, je vous suggère de voir la vidéo facebook ci-dessous qui explique la différence de manière plus démonstrative.

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

Le principale différence entre eux est de savoir qui effectue le transfert. En "réponse.rediriger "le transfert est effectué par le navigateur alors que dans" Serveur.transfert" c'est fait par le serveur. Essayons de comprendre cette déclaration de manière plus détaillée.

Dans " Serveur.Transfert " voici la séquence de la façon dont le transfert se produit: -

1.L'utilisateur envoie une demande à un ASP.NET page. Dans la figure ci-dessous, la demande est envoyée à "WebForm1" et nous aimerions naviguer vers "Webform2".

2.Serveur démarre l'exécution de "Webform1" et le cycle de vie de la page commence. Mais avant le cycle de vie complet de la page est terminée "serveur.transfert "arrive à "WebForm2".

3.L'objet de page" Webform2 " est créé, le cycle de vie complet de la page est exécuté et la réponse HTML de sortie est ensuite envoyée au navigateur.

entrez la description de l'image ici

Alors que dans " Réponse.Redirect " suivant est la séquence d'événements pour la navigation: -

1.Client (navigateur) envoie une demande à une page. Dans la figure ci-dessous la demande est envoyé à "WebForm1" et nous aimerions naviguer vers "Webform2".

2.Cycle de vie de "Webform1" commence à s'exécuter. Mais entre le cycle de vie "réponse.Rediriger " arrive.

3.Maintenant, plutôt que le serveur faisant une redirection, il envoie une commande HTTP 302 au navigateur. Cette commande indique au navigateur qu'il doit lancer une requête GET à "Webform2.aspx" de la page.

4.Le navigateur interprète la commande 302 et envoie une requête GET pour "Webform2.aspx".

entrez la description de l'image ici

En d'autres termes "serveur.Transfert "est exécuté par le serveur tandis que" Réponse.Redirect " est exécuté par le navigateur thr. "Réponse.Redirect " a besoin de deux demandes pour faire une redirection de la page.

Alors, quand utiliser " serveur.Transfert "et quand utiliser" réponse.Rediriger" ?

Utiliser " Serveur.Transférer "lorsque vous souhaitez naviguer sur des pages qui résident sur le même serveur, utilisez" réponse.Rediriger " lorsque vous voulez naviguer entre les pages qui réside sur différents serveurs et domaines.

entrez la description de l'image ici

Voici un tableau récapitulatif des différences à la craie et du scénario à utiliser.

entrez la description de l'image ici

19
répondu Shivprasad Koirala 2014-05-19 10:15:52

En plus du commentaire de ScarletGarden, vous devez également tenir compte de l'impact des moteurs de recherche et de votre redirection. Cette page a-t-elle été déplacée de façon permanente? Temporairement? Cela fait une différence.

Voir: Réponse.Redirection vs. "301 déplacé de façon permanente":

Nous avons tous utilisé la réponse.Rediriger à un moment ou à un autre. C'est du rapide et un moyen facile d'obtenir des visiteurs pointés dans la bonne direction si elles en quelque sorte finir dans le mauvais endroit. Mais saviez-vous savoir que Réponse.Rediriger envoie un Code D'état de la réponse HTTP de " 302 Trouvé " quand vous pourriez vraiment vouloir envoyer "301 déplacé de façon permanente"?

La distinction semble petite, mais dans certains cas, il peut effectivement faire un grande différence. Par exemple, si vous utiliser une réponse" 301 déplacé en permanence" code, la plupart des moteurs de recherche va supprimer le lien obsolète de leur index et le remplacer par le nouveau. Si vous utilisez "302 trouvé" ,ils vont continuer en revenant à l'ancien page...

10
répondu Diodeus - James MacFarlane 2009-02-06 18:38:05

La beauté du serveur.Le transfert est ce que vous pouvez faire avec:

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

Vous pouvez obtenir n'importe quoi de votre page précédente en utilisant la méthode ci-dessus tant que vous utilisez le serveur.Transfert mais pas de réponse.Rediriger

8
répondu Israel Margulies 2013-02-25 16:38:46

Le Transfert est entièrement côté serveur. La barre d'adresse du Client reste constante. Une certaine complexité au sujet du transfert de contexte entre les demandes. Le rinçage et le redémarrage des gestionnaires de page peuvent être coûteux, alors faites votre transfert tôt dans le pipeline, par exemple dans un HttpModule pendant BeginRequest. Lisez attentivement les documents MSDN et testez et comprenez les nouvelles valeurs de HttpContext.Demande-en particulier dans les scénarios de publication. Nous utilisons habituellement le serveur.Transfert pour des scénarios d'erreur.

La redirection se termine la demande avec un état 302 et une réponse aller-retour côté client avec et mange en interne une exception (mineur serveur perf hit - dépend du nombre que vous faites par jour) Client navigue ensuite vers une nouvelle adresse. Barre d'adresse du navigateur et mises à jour de l'historique, etc. Le Client paie le coût d'un aller-retour supplémentaire - coût varie en fonction de la latence. Dans notre métier, nous redirigeons beaucoup nous avons écrit notre propre module pour éviter le coût d'exception.

6
répondu stephbu 2008-10-22 05:42:15

Réponse.La redirection est plus coûteuse car elle ajoute un voyage supplémentaire au serveur pour savoir où aller.

Serveur.Le transfert est plus efficace, mais il peut être un peu erroné pour l'utilisateur car l'Url ne change pas physiquement.

D'après mon expérience, la différence de performance n'a pas été suffisamment significative pour utiliser cette dernière approche

5
répondu deadbug 2008-10-22 05:41:53

Serveur.Le transfert ne change pas L'URL dans le navigateur client, de sorte que le navigateur ne sait pas que vous avez changé pour un autre gestionnaire côté serveur. Réponse.Redirection indique au navigateur de se déplacer vers une autre page, de sorte que l'url dans la barre de titre change.

Serveur.Le transfert est légèrement plus rapide car il évite un aller-retour vers le serveur, mais le non-changement d'url peut être bon ou mauvais pour vous, en fonction de ce que vous essayez de faire.

4
répondu krosenvold 2009-02-06 18:38:05

Réponse.Redirection: indique au navigateur que la page demandée peut être trouvé à un nouvel emplacement. Le navigateur lance ensuite une autre requête à la nouvelle page en chargeant son contenu dans le navigateur. Il en résulte deux requêtes par le navigateur.

Serveur.Transfert:, Il transfère l'exécution de la première page à la deuxième page sur le serveur. En ce qui concerne le client du navigateur, il a fait une demande et la page initiale est celle qui répond avec le contenu. Le l'avantage de cette approche est un aller-retour de moins vers le serveur à partir du navigateur client. En outre, toutes les variables de formulaire publiées et les paramètres de chaîne de requête sont également disponibles sur la deuxième page.

4
répondu Nick Kahn 2012-01-24 01:43:20

Juste plus de détails sur Transfer (), c'est en fait le serveur.Execute() + Réponse.End (), son code source est ci-dessous (à partir de Mono/. net 4.0):

public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

Et pour Execute (), ce qu'il faut exécuter est le gestionnaire du chemin donné, voir

ASP.NET ne vérifie pas que l'utilisateur actuel est autorisé à afficher la ressource fournie par la méthodeExecute . Bien que le ASP.NET la logique d'autorisation et d'authentification s'exécute avant que le gestionnaire de ressources appelé, ASP.NET appelle directement le gestionnaire indiqué par la méthodeExecute et ne réexécute pas la logique d'authentification et d'autorisation pour la nouvelle ressource. Si la stratégie de sécurité de votre application exige que les clients disposent de l'autorisation appropriée pour accéder à la ressource, l'application doit forcer la réautorisation ou fournir un mécanisme de contrôle d'accès personnalisé.

, Vous pouvez forcer la reconduction à l'aide de la Rediriger méthode au lieu de la Exécuter méthode. Rediriger effectue une redirection côté client dans lequel le navigateur demande la nouvelle ressource. Étant donné que cette redirection est une nouvelle requête entrant dans le système, elle est soumise à toute la logique d'authentification et d'autorisation des services D'information Internet (IIS) et ASP.NET Politique de sécurité.

-à partir de MSDN

3
répondu rockXrock 2013-09-12 06:17:15

Il y a beaucoup de différences comme indiqué ci-dessus. En dehors de tout, il y a une différence de plus. Réponse.redirect() peut être utilisé pour rediriger l'utilisateur vers une page qui ne fait pas partie de l'application, mais le serveur.transfert() ne peut être utilisé pour rediriger l'utilisateur dans l'application.

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

Server.Transfer(''http://www.google.com");
//This will not work.
2
répondu Microsoft Developer 2013-08-09 11:07:24
  1. tout comme le lien hypertexte et la réponse.Redirection Serveur.Le transfert est utilisé pour naviguer vers d'autres pages/sites s'exécutant sur le même serveur web.
  2. Serveur.Le transfert ne peut pas être utilisé pour naviguer vers des sites / pages sur un serveur web différent.
  3. Serveur.Le transfert ne modifie pas L'URL dans la barre d'adresse
  4. Serveur.Le transfert est plus rapide que la réponse.Rediriger comme la redirection se produit sur le serveur dans un cycle de requête / réponse. Réponse.Redirect() implique 2 requête / réponse cycle.
  5. Avec Le Serveur.Transfert les Variables de formulaire de la requête d'origine sont conservées.
2
répondu Rae Lee 2016-05-01 12:29:46

Serveur.Transfer (): le client est affiché tel quel sur la page de demande uniquement, mais tout le contenu est de la page demandée. Les données peuvent être persist à travers les pages en utilisant le contexte.Collection d'éléments, qui est l'un des meilleurs moyens de transférer des données d'une page à l'autre en gardant l'état de la page en vie.

Réponse.Redirect (): le client connaît l'emplacement physique (nom de la page et chaîne de requête). Cadre.Les éléments perdent la persistance lorsque vous naviguez vers la page de destination. Dans les versions antérieures D'IIS, si nous voulions envoyer un utilisateur à une nouvelle page Web, la seule option que nous avions était la réponse.Rediriger. Bien que cette méthode ne réaliser notre objectif, il a plusieurs inconvénients importants. Le plus gros problème est que cette méthode fait que chaque page est traitée comme une transaction distincte. En plus de rendre difficile le maintien de votre intégrité transactionnelle, la réponse.Redirect introduit quelques maux de tête supplémentaires. Tout d'abord, il empêche une bonne encapsulation du code. Deuxièmement, vous perdez l'accès à toutes les propriétés de l'objet de la Requête. Bien sûr, il y a des solutions de contournement, mais elles sont difficiles. Enfin, La Réponse.La redirection nécessite un aller-retour vers le client, ce qui, sur les sites à volume élevé, provoque des problèmes d'évolutivité.

2
répondu Nimesh khatri 2017-01-03 10:08:31

Réponse.La redirection implique un aller-retour supplémentaire et met à jour la barre d'adresse.

Serveur.Le transfert ne modifie pas la barre d'adresse, le serveur répond à la demande avec le contenu d'une autre page

Par exemple

Réponse.Redirection:-

  1. sur le client, le navigateur demande une page http://InitiallyRequestedPage.aspx
  2. Sur le serveur répond à la demande avec 302 passant l'adresse de redirection http://AnotherPage.aspx .
  3. sur le client, le navigateur effectue une seconde requête à l'adresse http://AnotherPage.aspx .
  4. Sur le serveur répond avec le contenu de http://AnotherPage.aspx

Serveur.Transfert:-

  1. sur le navigateur client demande une page http://InitiallyRequestedPage.aspx
  2. sur le serveur Serveur.Transfert à http://AnotherPage.aspx
  3. Sur le serveur la réponse est faite à la demande de http://InitiallyRequestedPage.aspx renvoyer le contenu de http://AnotherPage.aspx

Réponse.Rediriger

Avantages:- RESTful-il change la barre d'adresse, l'adresse peut être utilisée pour enregistrer les changements d'état entre les demandes.

Inconvénients:- Lent - il y a un aller-retour supplémentaire entre le client et le serveur. Cela peut être coûteux lorsqu'il y a une latence importante entre le client et le serveur.

Serveur.Transfert

Avantages:- Rapide.

Inconvénients:- État perdu-si vous utilisez le serveur.Transfert pour changer l'état de l'application en réponse aux retours post, si la page est ensuite rechargée, cet état sera perdu, car la barre d'adresse sera la même que lors de la première demande.

0
répondu Mick 2014-05-14 01:23:28

Réponse.Rediriger Réponse.Redirect() vous enverra vers une nouvelle page, mettra à jour la barre d'adresse et l'ajoutera à l'historique du navigateur. Sur votre navigateur, vous pouvez cliquer sur retour. Il redirige la demande vers des pages HTML simples sur notre serveur ou vers un autre serveur web. Il provoque des allers-retours supplémentaires au serveur à chaque demande. Il ne conserve pas les Variables de chaîne de requête et de formulaire de la requête d'origine. Il permet de voir la nouvelle URL redirigée où elle est redirigée dans le navigateur (et être en mesure de le mettre en signet si c'est nécessaire). Réponse. Redirect envoie simplement un message vers le navigateur (HTTP 302).

Serveur.Transfert Serveur.Transfer () ne change pas la barre d'adresse, nous ne pouvons pas revenir en arrière.On devrait utiliser le serveur.Transfer() quand il ne veut pas que l'utilisateur voit où il va. Parfois sur une page de type "chargement". Il transfère la demande de page actuelle à une autre .page aspx sur le même serveur. Il préserve les ressources du serveur et évite les allers-retours inutiles pour serveur. Il préserve les Variables de chaîne de requête et de formulaire (éventuellement). Il ne montre pas l'URL réelle où il redirige la demande dans le navigateur Web des utilisateurs. Serveur.Le transfert se produit sans que le navigateur sache quoi que ce soit, le navigateur demande une page, mais le serveur renvoie le contenu d'une autre.

0
répondu Shailendra Mishra 2015-07-20 13:33:53