Server.Transfer()を使用して、同じサーバー上の別の「.aspx」ページにリダイレクトする必要があることを知っています。しかし、このメソッドを使用して別のサーバーまたはhtmlページのaspxページにリダイレクトしない理由は何ですか?あなたの答えは本当に応用されています。
5 に答える
まず、Server.Transferを使用して別のページに転送すると、サーバーリソースが節約されます。ブラウザにリダイレクトするように指示する代わりに、Webサーバーの「フォーカス」を変更してリクエストを転送するだけです。これは、通過するHTTPリクエストの数が少ないことを意味します。これにより、Webサーバーへの負荷が軽減され、アプリケーションの実行速度が向上します。
ただし、注意してください。「転送」プロセスはサーバー上で実行されているサイトでのみ機能するため、Server.Transferを使用してユーザーを外部サイトに送信することはできません。Response.Redirectだけがそれを行うことができます。
次に、Server.Transferはブラウザで元のURLを維持します。これは、デバッグ時に混乱を招く可能性がありますが、データ入力手法の合理化に非常に役立ちます。
差出人:Server.TransferとResponse.Redirect
つまり、簡単に言うと、Response.Redirectは、ブラウザに別のページにアクセスするように指示するだけです。Server.Transferは、サーバーリクエストを減らし、URLを同じに保ち、少しのバグバッシングで、クエリ文字列とフォーム変数を転送できるようにします。
- Response.Redirectは、サイト訪問者がリダイレクト先のページをブックマークできるため、よりユーザーフレンドリーです。
- 転送されたページは、実際とは異なるURLとしてクライアントに表示されます。つまり、別のディレクトリからページに転送すると、相対リンクや画像パスなどが機能しない場合があります。
- Server.Transferには、フォームデータを新しいページに渡すためのオプションのパラメーターがあります。
- リリースバージョン以降、これは機能しなくなりました。これは、Viewstateのセキュリティがデフォルトで強化され(EnableViewStateMacのデフォルトはtrue)、新しいページがフォームデータにアクセスできないためです。元のハンドラーを要求することにより、新しいページの元のページの値に引き続きアクセスできます。
Server.Transfer()は、1つのWebアプリケーション内でのみ機能します。
Transferを使用すると、リクエストの「処理」は内部的に(Webサーバー/アプリケーションに)渡されるため、Requestオブジェクトは同じままです。これは、処理がWebアプリケーション内にとどまる必要があることを意味します。
別のWebアプリケーションで処理を続行する場合は、そこで新しいリクエストが必要になります。これは、ブラウザに別のリクエストを発行させる必要があることを意味するため、Response.Redirectが必要です。
Server.Transferは、単一のHttpContextに対してのみ発生します。各仮想ディレクトリまたはアプリには独自のHttpContextオブジェクトがあり、それらが共存していることを認識していません。だからあなたはそれをすることはできません。
セッションはサーバー間で共有されないため、大きな問題になります。