Was ist der Unterschied zwischen Server.Transfer
und Response.Redirect
?
- Was sind die Vor- und Nachteile der einzelnen?
- Wann ist eins über das andere angemessen?
- Wann ist man nicht angemessen?
asp.net
redirect
server.transfer
kedar kamthe
quelle
quelle
Server.TransferRequest
anstelle von verwendenServer.Transfer
.Antworten:
Response.Redirect
sendet einfach eine Nachricht (HTTP 302) an den Browser.Server.Transfer
Wenn der Browser nichts weiß, fordert der Browser eine Seite an, aber der Server gibt den Inhalt einer anderen Seite zurück.quelle
Response.Redirect()
Sie werden auf eine neue Seite weitergeleitet, die Adressleiste aktualisiert und dem Browserverlauf hinzugefügt. In Ihrem Browser können Sie zurückklicken.Server.Transfer()
ändert die Adressleiste nicht. Sie können nicht zurückschlagen.Ich benutze,
Server.Transfer()
wenn ich nicht möchte, dass der Benutzer sieht, wohin ich gehe. Manchmal auf einer Seite vom Typ "Laden".Ansonsten werde ich immer verwenden
Response.Redirect()
.quelle
Um es kurz zu machen:
Response.Redirect
Weist den Browser einfach an, eine andere Seite zu besuchen.Server.Transfer
Reduziert Serveranforderungen, behält die URL bei und ermöglicht es Ihnen mit ein wenig Bug-Bashing, die Abfragezeichenfolge und Formularvariablen zu übertragen.Etwas, das ich gefunden habe und dem ich zustimme ( Quelle ):
quelle
maintaining the original URL... ...really help streamline data entry techniques
?Response.Redirect()
sollte verwendet werden, wenn:Server.Transfer()
sollte verwendet werden, wenn:quelle
Response.Redirect leitet die Seite auf eine andere Seite um, nachdem die erste Seite beim Client eingegangen ist. Der Kunde kennt also die Umleitung.
Server.Transfer beendet die aktuelle Ausführung der Seite. Der Client kennt die Umleitung nicht. Sie können die Abfragezeichenfolge und Formularvariablen übertragen.
Es hängt also von Ihren Bedürfnissen ab, welche besser ist.
quelle
Response.Redirect
, um die Originalseite zu laden, obwohl ich angerufen habeResponse.Redirect
?"response.redirect" und "server.transfer" helfen dabei, Benutzer von einer Seite auf eine andere Seite zu übertragen, während die Seite ausgeführt wird. Die Art und Weise, wie sie diese Übertragung / Umleitung durchführen, ist jedoch sehr unterschiedlich.
Für den Fall, dass Sie ein visueller Typ sind und eher eine Demonstration als eine Theorie sehen möchten, würde ich vorschlagen, das folgende Facebook-Video zu sehen, das den Unterschied auf demonstrativere Weise erklärt.
https://www.facebook.com/photo.php?v=762186150488997
Der Hauptunterschied zwischen ihnen besteht darin, wer die Übertragung durchführt. In "response.redirect" erfolgt die Übertragung durch den Browser, in "server.transfer" durch den Server. Versuchen wir, diese Aussage genauer zu verstehen.
In "Server.Transfer" ist die Reihenfolge der Übertragung wie folgt: -
1. Der Benutzer sendet eine Anforderung an eine ASP.NET-Seite. In der folgenden Abbildung wird die Anfrage an "WebForm1" gesendet und wir möchten zu "Webform2" navigieren.
2.Server startet die Ausführung von "Webform1" und der Lebenszyklus der Seite beginnt. Bevor jedoch der gesamte Lebenszyklus der Seite abgeschlossen ist, passiert "Server.transfer" mit "WebForm2".
3. Das Seitenobjekt "Webform2" wird erstellt, der gesamte Seitenlebenszyklus wird ausgeführt und die HTML-Antwort wird an den Browser gesendet.
In "Response.Redirect" folgt die folgende Abfolge von Ereignissen für die Navigation: -
1.Client (Browser) sendet eine Anfrage an eine Seite. In der folgenden Abbildung wird die Anfrage an "WebForm1" gesendet und wir möchten zu "Webform2" navigieren.
2. Der Lebenszyklus von "Webform1" wird ausgeführt. Aber zwischen dem Lebenszyklus passiert "Response.Redirect".
3. Anstatt dass der Server eine Umleitung durchführt, sendet er einen HTTP 302-Befehl an den Browser. Dieser Befehl teilt dem Browser mit, dass er eine GET-Anforderung an die Seite "Webform2.aspx" initiieren muss.
4.Browser interpretiert den Befehl 302 und sendet eine GET-Anforderung für "Webform2.aspx".
Mit anderen Worten, "Server.Transfer" wird vom Server ausgeführt, während "Response.Redirect" vom Browser ausgeführt wird. "Response.Redirect" benötigt zwei Anforderungen, um eine Umleitung der Seite durchzuführen.
Wann sollte "Server.Transfer" und wann "Response.Redirect" verwendet werden?
Verwenden Sie "Server.Transfer", wenn Sie durch Seiten navigieren möchten, die sich auf demselben Server befinden, und "Response.Redirect", wenn Sie zwischen Seiten navigieren möchten, die sich auf verschiedenen Servern und Domänen befinden.
Nachfolgend finden Sie eine Übersichtstabelle, in der Unterschiede herausgearbeitet werden und in welchem Szenario sie verwendet werden sollen.
quelle
Server.Transfer
: denselben Server oder dieselbe IIS-Website ?Das Schöne an Server.Transfer ist, was Sie damit machen können:
Mit der oben beschriebenen Methode können Sie alles von Ihrer vorherigen Seite abrufen, solange Sie Server.Transfer, aber nicht Response.Redirect verwenden
quelle
Zusätzlich zu ScarletGardens Kommentar müssen Sie auch die Auswirkungen von Suchmaschinen und Ihre Weiterleitung berücksichtigen. Hat sich diese Seite dauerhaft verschoben? Vorübergehend? Es macht einen Unterschied.
siehe: Response.Redirect vs. "301 Permanent verschoben" :
quelle
Die Übertragung erfolgt vollständig serverseitig. Die Client-Adressleiste bleibt konstant. Einige Komplexität bei der Übertragung des Kontexts zwischen Anforderungen. Das Leeren und Neustarten von Seitenhandlern kann teuer sein. Führen Sie Ihre Übertragung daher frühzeitig durch, z. B. in einem HttpModule während BeginRequest. Lesen Sie die MSDN-Dokumente sorgfältig durch und testen und verstehen Sie die neuen Werte von HttpContext.Request - insbesondere in Postback-Szenarien. Wir verwenden normalerweise Server.Transfer für Fehlerszenarien.
Die Umleitung beendet die Anforderung mit einem 302-Status und einer clientseitigen Roundtrip-Antwort mit einer internen Ausnahme (geringfügiger Server-Perfektionstreffer - hängt davon ab, wie viele Sie pro Tag ausführen). Der Client navigiert dann zu einer neuen Adresse. Browser-Adressleiste & Verlaufsaktualisierungen usw. Der Kunde zahlt die Kosten für eine zusätzliche Hin- und Rückfahrt - die Kosten variieren je nach Latenz. In unserem Geschäft leiten wir viel um, wir haben unser eigenes Modul geschrieben, um die Ausnahmekosten zu vermeiden.
quelle
Es gibt viele Unterschiede wie oben angegeben. Abgesehen von vor allem gibt es noch einen Unterschied.
Response.Redirect()
kann verwendet werden, um Benutzer auf eine Seite umzuleiten, die nicht Teil der Anwendung ist, sondernServer.Transfer()
nur, um Benutzer innerhalb der Anwendung umzuleiten.quelle
Response.Redirect ist teurer, da es dem Server eine zusätzliche Fahrt hinzufügt, um herauszufinden, wohin es gehen soll.
Server.Transfer ist effizienter, kann jedoch für den Benutzer ein wenig irreführend sein, da sich die URL nicht physisch ändert.
Nach meiner Erfahrung war der Leistungsunterschied nicht signifikant genug, um den letzteren Ansatz zu verwenden
quelle
Server.Transfer ändert die URL im Client-Browser nicht, sodass der Browser effektiv nicht weiß, dass Sie zu einem anderen serverseitigen Handler gewechselt haben. Response.Redirect weist den Browser an, zu einer anderen Seite zu wechseln, sodass sich die URL in der Titelleiste ändert.
Server.Transfer ist etwas schneller, da ein Roundtrip zum Server vermieden wird. Die Nichtänderung der URL kann jedoch entweder gut oder schlecht für Sie sein, je nachdem, was Sie tun möchten.
quelle
Response.Redirect: teilt dem Browser mit, dass die angeforderte Seite an einem neuen Speicherort gefunden werden kann. Der Browser initiiert dann eine weitere Anforderung an die neue Seite und lädt deren Inhalt in den Browser. Dies führt zu zwei Anfragen des Browsers.
Server.Transfer: Überträgt die Ausführung von der ersten Seite auf die zweite Seite des Servers. Der Browser-Client hat eine Anfrage gestellt und die erste Seite antwortet mit Inhalten. Der Vorteil dieses Ansatzes ist eine weniger Hin- und Rückfahrt vom Client-Browser zum Server. Außerdem sind auf der zweiten Seite alle veröffentlichten Formularvariablen und Abfragezeichenfolgenparameter verfügbar.
quelle
Nur mehr Details zu Transfer (), es ist eigentlich Server.Execute () + Response.End (), sein Quellcode ist unten (von Mono / .net 4.0):
und für Execute () ist der Handler auszuführen des angegebenen Pfades, siehe
quelle
Response.Redirect beinhaltet eine zusätzliche Hin- und Rückfahrt und aktualisiert die Adressleiste.
Server.Transfer bewirkt keine Änderung der Adressleiste. Der Server antwortet auf die Anforderung mit Inhalten von einer anderen Seite
z.B
Response.Redirect: -
Server.Transfer: -
Response.Redirect
Vorteile: - RESTful - Ändert die Adressleiste. Die Adresse kann verwendet werden, um Statusänderungen zwischen Anforderungen aufzuzeichnen.
Nachteile: - Langsam - Es gibt eine zusätzliche Hin- und Rückfahrt zwischen Client und Server. Dies kann teuer sein, wenn zwischen dem Client und dem Server eine erhebliche Latenz besteht.
Server.Transfer
Vorteile: - Schnell.
Nachteile: - Status verloren - Wenn Sie Server.Transfer verwenden, um den Status der Anwendung als Reaktion auf Post-Backs zu ändern. Wenn die Seite dann neu geladen wird, geht dieser Status verloren, da die Adressleiste dieselbe ist wie zuvor auf die erste Anfrage.
quelle
Response.Redirect Response.Redirect () sendet Sie zu einer neuen Seite, aktualisiert die Adressleiste und fügt sie dem Browserverlauf hinzu. In Ihrem Browser können Sie zurückklicken. Die Anfrage wird auf einige einfache HTML-Seiten auf unserem Server oder auf einen anderen Webserver umgeleitet. Bei jeder Anforderung werden zusätzliche Roundtrips zum Server ausgeführt. Abfragezeichenfolgen- und Formularvariablen aus der ursprünglichen Anforderung werden nicht beibehalten. Es ermöglicht die Anzeige der neuen umgeleiteten URL, unter der sie im Browser umgeleitet wird (und kann sie bei Bedarf mit einem Lesezeichen versehen). Antwort. Die Umleitung sendet einfach eine Nachricht an den Browser (HTTP 302).
Server.Transfer Server.Transfer () ändert die Adressleiste nicht, wir können nicht zurückschlagen. Man sollte Server.Transfer () verwenden, wenn der Benutzer nicht sehen soll, wohin er geht. Irgendwann auf einer Seite vom Typ "Laden". Es überträgt die aktuelle Seitenanforderung auf eine andere ASPX-Seite auf demselben Server. Es schont die Serverressourcen und vermeidet unnötige Roundtrips zum Server. Es werden Abfragezeichenfolgen- und Formularvariablen (optional) beibehalten. Es wird nicht die tatsächliche URL angezeigt, unter der die Anforderung im Webbrowser des Benutzers umgeleitet wird. Server.Transfer erfolgt, ohne dass der Browser etwas weiß. Der Browser fordert eine Seite an, aber der Server gibt den Inhalt einer anderen Seite zurück.
quelle