Server.Transfer
とはどう違いResponse.Redirect
ますか?
- それぞれの長所と短所は何ですか?
- 一方が他方よりも適切なのはいつですか?
- 適切でないのはいつですか?
Server.Transfer
とはどう違いResponse.Redirect
ますか?
Response.Redirect
メッセージ(HTTP 302)をブラウザに送信するだけです。
Server.Transfer
ブラウザが何も知らずに発生した場合、ブラウザはページをリクエストしますが、サーバーは別のコンテンツを返します。
Response.Redirect()
新しいページに移動し、アドレス バーを更新して、ブラウザの履歴に追加します。お使いのブラウザでは、クリックして戻ることができます。
Server.Transfer()
アドレスバーを変更しません。打ち返すことはできません。
Server.Transfer()
ユーザーに自分の行き先を知られたくない場合に使用します。時々「読み込み中」タイプのページで。
それ以外の場合は、常に使用しますResponse.Redirect()
。
Response.Redirect()
次の場合に使用する必要があります。
Server.Transfer()
次の場合に使用する必要があります。
「response.redirect」と「server.transfer」は、ページの実行中にユーザーをあるページから別のページに転送するのに役立ちます。しかし、この転送/リダイレクトの方法は大きく異なります。
あなたが視覚的な人で、理論ではなく実演を見たい場合は、以下のFacebookビデオを見て、より実演的な方法で違いを説明することをお勧めします.
https://www.facebook.com/photo.php?v=762186150488997
それらの主な違いは、誰が転送を行うかです。「response.redirect」では転送はブラウザによって行われ、「server.transfer」ではサーバーによって行われます。この声明をより詳細に理解してみましょう。
「Server.Transfer」では、転送がどのように行われるかのシーケンスを次に示します。
1.ユーザーが ASP.NET ページに要求を送信します。下の図では、リクエストは「WebForm1」に送信され、「Webform2」に移動したいと考えています。
2.サーバーが「Webform1」の実行を開始し、ページのライフサイクルが開始されます。しかし、ページの完全なライフ サイクルが完了する前に、「Server.transfer」が「WebForm2」に発生します。
3.「Webform2」ページ オブジェクトが作成され、完全なページ ライフ サイクルが実行され、出力 HTML 応答がブラウザに送信されます。
「Response.Redirect」では、ナビゲーションの一連のイベントを次に示します。
1.クライアント(ブラウザ)がページにリクエストを送信します。下の図では、リクエストは「WebForm1」に送信され、「Webform2」に移動したいと考えています。
2.「Webform1」のライフサイクルが実行を開始します。しかし、ライフサイクルの合間に「Response.Redirect」が発生します。
3.サーバーがリダイレクトを行うのではなく、HTTP 302 コマンドをブラウザーに送信します。このコマンドは、"Webform2.aspx" ページへの GET 要求を開始する必要があることをブラウザーに伝えます。
4.ブラウザは 302 コマンドを解釈し、「Webform2.aspx」の GET リクエストを送信します。
つまり、「Server.Transfer」はサーバーによって実行され、「Response.Redirect」はブラウザーによって実行されます。「Response.Redirect」は、ページのリダイレクトを行うために 2 つのリクエストが必要です。
では、いつ「Server.Transfer」を使用し、いつ「Response.Redirect」を使用するのでしょうか?
同じサーバーにあるページをナビゲートする場合は「Server.Transfer」を使用し、異なるサーバーとドメインにあるページ間をナビゲートする場合は「Response.Redirect」を使用します。
以下は、相違点と使用するシナリオの要約表です。
Server.Transfer の優れた点は、それでできることです。
TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");
Server.Transfer を使用し、Response.Redirect を使用しない限り、上記の方法を使用して前のページから何でも取得できます。
上記のように多くの違いがあります。何よりも、もう1つ違いがあります。Response.Redirect()
アプリケーションの一部ではない任意のページにユーザーをリダイレクトするために使用できますがServer.Transfer()
、アプリケーション内でユーザーをリダイレクトするためにのみ使用できます。
//This will work.
Response.Redirect("http://www.google.com");
//This will not work.
Server.Transfer("http://www.google.com");
転送は完全にサーバー側です。クライアントのアドレス バーは一定のままです。リクエスト間のコンテキストの転送に関する複雑さ。ページ ハンドラーのフラッシュと再起動はコストがかかる可能性があるため、転送はパイプラインの早い段階で行います。たとえば、BeginRequest 中の HttpModule で転送します。MSDN のドキュメントを注意深く読み、HttpContext.Request の新しい値をテストして理解してください (特にポストバック シナリオで)。通常、エラー シナリオには Server.Transfer を使用します。
リダイレクトは、302 ステータスとクライアント側のラウンドトリップ応答でリクエストを終了し、内部的に例外を食べます (マイナー サーバー パフォーマンス ヒット - 1 日に何回実行するかによって異なります) クライアントはその後、新しいアドレスに移動します。ブラウザのアドレスバーと履歴の更新など。クライアントは余分な往復の費用を支払います - 費用は待ち時間によって異なります。私たちのビジネスでは、例外コストを回避するために独自のモジュールを作成して多くのリダイレクトを行っています。
Response.Redirect は、どこに行くかを調べるためにサーバーへの余分な旅行を追加するため、よりコストがかかります。
Server.Transfer はより効率的ですが、Url が物理的に変更されないため、ユーザーに誤解を与える可能性があります。
私の経験では、パフォーマンスの違いは、後者のアプローチを使用するほど重要ではありませんでした
Response.Redirect:要求されたページが新しい場所で見つかることをブラウザに伝えます。次に、ブラウザーは新しいページへの別の要求を開始し、そのコンテンツをブラウザーにロードします。これにより、ブラウザによる 2 つのリクエストが発生します。
Server.Transfer:サーバー上の最初のページから 2 番目のページに実行を転送します。ブラウザ クライアントに関する限り、それは 1 つの要求を行い、最初のページはコンテンツで応答するページです。このアプローチの利点は、クライアント ブラウザからサーバーへのラウンド トリップが 1 回少なくなることです。また、投稿されたフォーム変数とクエリ文字列パラメーターは、2 番目のページでも使用できます。
Response.Redirect には余分なラウンド トリップが含まれ、アドレス バーが更新されます。
Server.Transfer はアドレス バーを変更せず、サーバーは別のページからのコンテンツで要求に応答します。
例えば
Response.Redirect:-
Server.Transfer:-
Response.Redirect
長所:- RESTful - アドレスバーを変更し、アドレスを使用してリクエスト間の状態の変化を記録できます。
短所:- 遅い - クライアントとサーバー間の余分な往復があります。これは、クライアントとサーバーの間にかなりの待ち時間がある場合、コストがかかる可能性があります。
サーバー.転送
長所: - 速い。
短所: - 状態の喪失 - ポストバックに応答して Server.Transfer を使用してアプリケーションの状態を変更している場合、ページがリロードされると、アドレス バーが以前と同じになるため、その状態が失われます。最初のリクエストで。
Response.Redirect Response.Redirect() は、新しいページに移動し、アドレス バーを更新して、ブラウザの履歴に追加します。お使いのブラウザでは、クリックして戻ることができます。サーバー上のいくつかのプレーンな HTML ページまたは他の Web サーバーにリクエストをリダイレクトします。これにより、リクエストごとにサーバーへの追加のラウンドトリップが発生します。元のリクエストのクエリ文字列とフォーム変数は保持されません。これにより、ブラウザでリダイレクトされた新しいリダイレクト URL を確認できます (必要に応じてブックマークすることもできます)。応答。リダイレクトは、(HTTP 302) ブラウザーにメッセージを送信するだけです。
Server.Transfer Server.Transfer() はアドレス バーを変更しません。後戻りできません。ユーザーに自分の行き先を知られたくない場合は、Server.Transfer() を使用する必要があります。「読み込み中」タイプのページでいつか。現在のページ要求を同じサーバー上の別の .aspx ページに転送します。サーバー リソースを保持し、サーバーへの不要なラウンドトリップを回避します。クエリ文字列とフォーム変数を保持します (オプション)。ユーザーの Web ブラウザーで要求をリダイレクトする実際の URL は表示されません。Server.Transfer はブラウザが何も知らずに発生し、ブラウザはページをリクエストしますが、サーバーは別のコンテンツを返します。