web-dev-qa-db-ja.com

クライアント側とサーバー側のリダイレクトのベストプラクティス:いつ何を使用するか?

ほとんどの言語がサーバー側のリダイレクトをサポートしていることを理解しています(asp.net: Response.Redirect, PHP: header( 'newpage' ) ; )。 JavaScriptを使用してリダイレクトを行うこともできます(window.location.href="newLocationURL")

いつどちらを選びますか?

ASP.net/IIS7(統合モードのアプリプール、32ビットアプリを有効にする= false)に関しては、ページに302ヘッダーがある場合でも、ページ本文全体がクライアント側に送信されることに気付きました。

そして これはPHPには当てはまらないと思います 、ヘッダーのみが送信されますか?クライアント側でリダイレクトを引用するということは、次の手順を意味します:クライアント側->サーバー側->クライアント側->サーバー側->クライアント側。

サーバー側でのリダイレクトとは、クライアント側->サーバー側->クライアント側(ヘッダーのみ)*->サーバー側->クライアント側を意味します。

W3C標準またはサーバー側のリダイレクトの実装は、Webサーバーテクノロジーごとに異なりますか?

編集:少なくともこの議論では、私はResponse.Redirect(asp.net内)のみに関心があり、server.transferには関心がありません

20
ram

JavaScriptの例は、実際にはリダイレクトではありません。 1/302 応答の手段はありません。これは、ページが到着してから長い時間、特定のJavascriptイベント中に発生する単純なリクエストです。ページの読み込み中にこれを行うと、実際のリダイレクトよりもオーバーヘッドが大きくなり、JSが無効になっているブラウザでも機能しなくなります。

リダイレクトは、301/302応答でサーバー側から開始されます。すべてのwebapp言語/フレームワークのデフォルトは302です。通常、それを指示する1つのパラメーターまたはコード行を追加することで301にすることができます。 301の利点は、特定のリクエストが検索ボットによって(もう)インデックスに登録されないことです。

9
BalusC

ASP.Netでは、2種類のサーバー側リダイレクトに重要な違いがあります。それらはResponse.RedirectとServer.Transferです。

Response.Redirectを呼び出すと、サーバーへの2回のラウンドトリップが必要になります。サーバーへの最初の呼び出しで、サーバーの応答はブラウザーに次のページを要求するように指示します。次のページを要求すると、Webサーバーへの2回目のラウンドトリップが構成されます。

Server.Transferを使用する場合、往復は1回だけです。したがって、ネットワークトラフィックははるかに少なくなります。ただし、Server.Transferの使用には制限があります。つまり、ターゲットページは同じWebサーバー上にある必要があります。つまり、Webアプリからwww.Google.comにServer.Transferを実行することはできません。ただし、Response.Redirectを実行できます。

これらのアプローチのいずれかを使用することに関連する他の詳細があり、それらを使用する前に調査する必要があります。ただし、この質問のコンテキストでは、どの言語でもResponse.Redirectを使用すると、実際に必要なネットワークトラフィックよりもはるかに重いネットワークトラフィックが発生する可能性があることに注意することが重要だと思います。

4
DOK