2010-02-22 13 views
16

Ich verstehe, dass die meisten Sprachen serverseitige Weiterleitungen (asp.net: Response.Redirect, PHP: header('newpage') ;) unterstützen. Sie können auch eine Umleitung mit JavaScript (window.location.href="newLocationURL") durchführen.Best Practices für clientseitige vs. serverseitige Weiterleitungen: wann was verwenden?

Wann würden Sie eines über das andere wählen?

In Bezug auf ASP.net/IIS7 (App-Pool im integrierten Modus, aktivieren 32 Bit apps = false), bemerkte ich, dass auch wenn die Seite einen 302-Header hat, die gesamte Seite an die Clientseite gesendet wird.

Und I believe this is not the case with PHP, nur Header gesendet werden? Um zu zitieren Redirect auf Client-Seite bedeutet folgende Schritte: Client-Seite -> Server-Seite -> Client-Seite -> Server-Seite -> Client-Seite.

Umleitung auf Server-Seite bedeutet: Client-Seite -> Server-Seite -> Client-Seite (nur Header) * -> Server-Seite -> Client-Seite.

Gibt es einen W3C-Standard oder eine serverseitige Redirect-Implementierung, die sich von einer Web-Server-Technologie zu einer anderen unterscheidet?

Edit: Ich bin nur besorgt über Response.Redirect (in asp.net) und nicht Server.Transfer, zumindest für diese Diskussion

Antwort

5

Das Beispiel JavaScript ein, die Hin-und-her von der Server-Seite Umleitung Sache .. vermeiden, ist eigentlich kein umleiten. Es gibt keine Möglichkeit einer 301/302 Antwort. Es ist nur eine einfache Anfrage, die während eines bestimmten Javascript-Ereignisses lange nach dem Eintreffen der Seite erfolgt. Wenn Sie dies während des Ladens der Seite tun, hätte es mehr Overhead als eine echte Weiterleitung, und es würde auch nicht mit JS-deaktivierten Browsern funktionieren.

Umleitungen müssen serverseitig mit einer 301/302-Antwort eingeleitet werden.Alle Webapp-Sprachen/Frameworks sind standardmäßig auf 302 eingestellt. Sie können es normalerweise durch Hinzufügen eines zusätzlichen Parameters oder einer Codezeile, die dies anweist, zu 301 machen. Der Vorteil von 301 besteht übrigens darin, dass die jeweilige Anfrage von den Suchmaschinen nicht mehr (mehr) indexiert wird.

3

In ASP.Net, gibt es eine wichtige Unterscheidung zwischen zwei Arten von Server Umleitungen. Sie sind Response.Redirect und Server.Transfer.

Wenn Sie Response.Redirect aufrufen, sind zwei Rundreisen zum Server erforderlich. Beim ersten Aufruf an den Server weist die Serverantwort den Browser an, die nächste Seite anzufordern. Das Anfordern der nächsten Seite ist der zweite Umlauf zum Webserver.

Wenn Sie Server.Transfer verwenden, gibt es nur einen Hin- und Rückweg. Daher gibt es viel weniger Netzwerkverkehr. Es gibt jedoch eine Einschränkung bei der Verwendung von Server.Transfer, dh die Zielseite muss sich auf demselben Webserver befinden. Das heißt, Sie können nicht Server.Transfer von Ihrer Web-App auf www.Google.com. Aber Sie können Response.Redirect dazu.

Es gibt andere Details, die mit der Verwendung eines dieser Ansätze verbunden sind, die Sie vor der Verwendung untersuchen möchten. Ich glaube jedoch, dass es im Zusammenhang mit dieser Frage wichtig ist, darauf hinzuweisen, dass in jeder Sprache Response.Redirect zu viel stärkerem Netzwerkverkehr führen kann als wirklich notwendig.

+0

Ihre Antwort ist willkommen. Im Gegensatz zu Response.Redirect sendet Server.Transfer kein 302. Sorry, ich war nicht klar mit meiner Frage – ram

-1

Es hängt wirklich davon ab, wo Sie entscheiden, dass Sie umleiten müssen. Wenn es serverseitiger Code ist, der bestimmt, dass Sie umleiten müssen, ist es serverseitiger Code, der den Umleitungsbefehl ausgibt. Wenn Sie auf der Client-Seite entscheiden können, dass eine Umleitung erforderlich ist, dann tun Sie es aus dem Client-Code.

Es ist wahrscheinlich effizienter von Client-Seite, da Sie

+0

Wenn es serverseitigen Code ist, der bestimmt, dass Sie umleiten müssen, was verhindert, dass die serverseitige Code einen JavaScript-Code hinzufügen, um den Client umleiten? – ram

+0

Nichts - Sie können das tun, wenn Sie möchten, aber Response.Redirect aufrufen, ist für mich einfacher als das Erstellen von JavaScript zu window.location.href. Und die Antwort auf den Browser sollte etwas kleiner sein. PS - meiner Erfahrung nach sendet asp.net * nicht den gesamten Seiteninhalt mit einem Response.Redirect - es sendet nur die notwendigen Header und die kleine Menge an HTML für die Standardnachricht "object moved to" (die selten benutzt wird)). – Ray

+0

Yup Ray, ich war überrascht, das in Charles zu sehen. Es passiert für Cassini sowie IIS7-integrierten Modus, obwohl nicht mit anderen Server/Server-Konfigurationen überprüft – ram