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 n'est-ce pas approprié?
asp.net
redirect
server.transfer
kedar kamthe
la source
la source
Server.TransferRequest
plutôt queServer.Transfer
.Réponses:
Response.Redirect
envoie simplement un message (HTTP 302) au navigateur.Server.Transfer
se produit sans que le navigateur sache quoi que ce soit, le navigateur demande une page, mais le serveur renvoie le contenu d'un autre.la source
Response.Redirect()
vous enverra sur une nouvelle page, mettra à jour la barre d'adresse et l'ajoutera à l'historique du navigateur. Sur votre navigateur, vous pouvez cliquer en arrière.Server.Transfer()
ne modifie pas la barre d'adresse. Vous ne pouvez pas riposter.J'utilise
Server.Transfer()
quand je ne veux pas que l'utilisateur voie où je vais. Parfois sur une page de type "chargement".Sinon, je vais toujours utiliser
Response.Redirect()
.la source
Pour être court:
Response.Redirect
dit simplement au navigateur de visiter une autre page.Server.Transfer
aide à réduire les demandes du serveur, maintient l'URL identique et, avec un peu de punition, 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 ):
la source
maintaining the original URL... ...really help streamline data entry techniques
?Response.Redirect()
doit être utilisé lorsque:Server.Transfer()
doit être utilisé lorsque:la source
Response.Redirect redirige la page vers une autre page après que la première page arrive au client. Le client connaît donc la redirection.
Server.Transfer 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 de choisir ce qui est le mieux.
la source
Response.Redirect
afin de charger la page d'origine même si j'ai appeléResponse.Redirect
?"response.redirect" et "server.transfer" permettent de transférer l'utilisateur d'une page à une autre pendant l'exécution de la page. Mais la façon dont ils effectuent ce transfert / redirection est très différente.
Dans le cas où vous êtes un mec visuel et que vous aimeriez voir une démonstration plutôt qu'une théorie, je 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
La principale différence entre eux est de savoir qui effectue le transfert. Dans "response.redirect", le transfert est effectué par le navigateur tandis que dans "server.transfer", il est effectué par le serveur. Essayons de comprendre cette déclaration de manière plus détaillée.
Dans "Server.Transfer", voici la séquence du transfert: -
1.L'utilisateur envoie une demande à une page ASP.NET. Dans la figure ci-dessous, la demande est envoyée à "WebForm1" et nous aimerions naviguer vers "Webform2".
2. Le serveur commence à exécuter "Webform1" et le cycle de vie de la page démarre. Mais avant la fin du cycle de vie de la page, «Server.transfer» 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.
Alors que dans "Response.Redirect" ce qui suit est la séquence d'événements pour la navigation: -
1.Le client (navigateur) envoie une demande à une page. Dans la figure ci-dessous, la demande est envoyée à "WebForm1" et nous aimerions naviguer vers "Webform2".
2.Le cycle de vie de "Webform1" commence à s'exécuter. Mais entre le cycle de vie "Response.Redirect" se produit.
Maintenant, plutôt que de faire une redirection par le serveur, il envoie une commande HTTP 302 au navigateur. Cette commande indique au navigateur qu'il doit lancer une demande GET sur la page "Webform2.aspx".
4.Browser interprète la commande 302 et envoie une demande GET pour "Webform2.aspx".
En d'autres termes, "Server.Transfer" est exécuté par le serveur tandis que "Response.Redirect" est exécuté par thr browser. "Response.Redirect" a besoin de deux requêtes pour faire une redirection de la page.
Alors, quand utiliser "Server.Transfer" et quand utiliser "Response.Redirect"?
Utilisez "Server.Transfer" lorsque vous souhaitez parcourir les pages qui résident sur le même serveur, utilisez "Response.Redirect" lorsque vous souhaitez naviguer entre les pages qui résident sur un serveur et un domaine différents.
Vous trouverez ci-dessous un tableau récapitulatif qui met en évidence les différences et dans quel scénario utiliser.
la source
Server.Transfer
: le même serveur ou le même site Web IIS ?La beauté de Server.Transfer est ce que vous pouvez en faire:
Vous pouvez obtenir n'importe quoi de votre page précédente en utilisant la méthode ci-dessus tant que vous utilisez Server.Transfer mais pas Response.Redirect
la source
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: Response.Redirect vs "301 Moved Permanently" :
la source
Le transfert est entièrement côté serveur. La barre d'adresse client reste constante. Une certaine complexité concernant le transfert de contexte entre les requêtes. Le vidage et le redémarrage des gestionnaires de pages 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.Request, en particulier dans les scénarios de publication. Nous utilisons généralement Server.Transfer pour les scénarios d'erreur.
La redirection met fin à la demande avec un état 302 et une réponse aller-retour côté client avec et mange en interne une exception (succès mineur du serveur - dépend du nombre que vous effectuez par jour) Le 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 - le coût varie en fonction de la latence. Dans notre entreprise, nous redirigeons beaucoup, nous avons écrit notre propre module pour éviter le coût d'exception.
la source
Il existe de nombreuses différences, comme indiqué ci-dessus. Hormis surtout, il y a encore une différence.
Response.Redirect()
peut être utilisé pour rediriger l'utilisateur vers n'importe quelle page qui ne fait pas partie de l'application maisServer.Transfer()
ne peut être utilisée que pour rediriger l'utilisateur au sein de l'application.la source
Response.Redirect est plus coûteux car il ajoute un voyage supplémentaire au serveur pour savoir où aller.
Server.Transfer est plus efficace mais il peut être un peu trompeur pour l'utilisateur car l'URL ne change pas physiquement.
D'après mon expérience, la différence de performances n'a pas été suffisamment importante pour utiliser cette dernière approche
la source
Server.Transfer ne modifie pas l'URL dans le navigateur client, donc le navigateur ne sait pas que vous avez changé pour un autre gestionnaire côté serveur. Response.Redirect indique au navigateur de passer à une autre page, donc l'URL dans la barre de titre change.
Server.Transfer 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, selon ce que vous essayez de faire.
la source
Response.Redirect: indique au navigateur que la page demandée peut être trouvée à un nouvel emplacement. Le navigateur lance ensuite une autre requête vers la nouvelle page en chargeant son contenu dans le navigateur. Il en résulte deux demandes par le navigateur.
Server.Transfer: 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 du contenu. 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.
la source
Juste plus de détails sur Transfer (), c'est en fait Server.Execute () + Response.End (), son code source est ci-dessous (de Mono / .net 4.0):
et pour Execute (), ce que c'est que d'exécuter est le gestionnaire du chemin donné, voir
la source
Response.Redirect implique un aller-retour supplémentaire et met à jour la barre d'adresse.
Server.Transfer ne fait pas changer la barre d'adresse, le serveur répond à la demande avec le contenu d'une autre page
par exemple
Réponse.Redirect: -
Server.Transfer: -
Response.Redirect
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 en cas de latence importante entre le client et le serveur.
Server.Transfer
Avantages: - Rapide.
Inconvénients: - État perdu - Si vous utilisez Server.Transfer pour changer l'état de l'application en réponse aux publications, si la page est ensuite rechargée, cet état sera perdu, car la barre d'adresse sera la même qu'elle était à la première demande.
la source
Response.Redirect Response.Redirect () vous enverra sur une nouvelle page, mettra à jour la barre d'adresse et l'ajoutera à l'historique du navigateur. Sur votre navigateur, vous pouvez cliquer en arrière. Il redirige la demande vers certaines pages HTML simples sur notre serveur ou vers un autre serveur Web. Il provoque des allers-retours supplémentaires vers le serveur à chaque demande. Il ne conserve pas la chaîne de requête et les variables de formulaire de la demande d'origine. Il permet de voir la nouvelle URL redirigée où elle est redirigée dans le navigateur (et de pouvoir la mettre en signet si nécessaire). Réponse. La redirection envoie simplement un message au navigateur (HTTP 302).
Server.Transfer Server.Transfer () ne modifie pas la barre d'adresse, nous ne pouvons pas riposter. On devrait utiliser Server.Transfer () quand il / elle ne veut pas que l'utilisateur voie où il va. Parfois sur une page de type "chargement". Il transfère la demande de page actuelle vers une autre page .aspx sur le même serveur. Il préserve les ressources du serveur et évite les allers-retours inutiles au serveur. Il conserve la chaîne de requête et les variables de formulaire (facultativement). Il ne montre pas l'URL réelle où il redirige la demande dans le navigateur Web de l'utilisateur. Server.Transfer 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.
la source