301はserver.transferを介して送信されますか?
PageA.aspx:
protected void Page_Load(object sender, EventArgs e)
{
Response.Status = "301 Moved Permanently";
Server.Transfer("/pageB.aspx");
}
301はserver.transferを介して送信されますか?
PageA.aspx:
protected void Page_Load(object sender, EventArgs e)
{
Response.Status = "301 Moved Permanently";
Server.Transfer("/pageB.aspx");
}
の後にリダイレクトする必要がある場合はServer.Transfer
、手動で行うことができます。
this.Response.Status = "301 Moved Permanently";
this.Response.RedirectLocation = "Default2.aspx";
詳細:
Server.Transfer
リダイレクトを引き起こさない
MSDN を参照してください。
Server.Transfer は、Response.Redirect メソッドの効率的な代替手段として機能します。Response.Redirect は、ブラウザーに別のページを要求するように指定します。リダイレクトは新しいページ要求を強制するため、ブラウザーは Web サーバーに対して 2 つの要求を行い、Web サーバーは余分な要求を処理します。IIS 5.0 では、サーバー上の別の ASP ページに実行を転送する新しい関数 Server.Transfer が導入されました。これにより、余分なリクエストが回避され、システム全体のパフォーマンスが向上し、ユーザー エクスペリエンスも向上します。
実際、私はあなたのコードを試してみましたが、うまくいきません。
301ステータスを送信しました:
HTTP/1.1 301 Moved Permanently
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 14 Jun 2012 18:54:22 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 626
Connection: Close
それが Fiddler からの応答です。
しかし、それは機能していません
それが機能しない理由は、サーバーから 3xx ステータスを送信するときに、リダイレクトに使用する URL を送り返す必要があるためだと思います (これにより、サーバーへの 2 番目の要求が発生します)。これは を使用すると自動的に行われますが、URL なしでサーバーからリダイレクト ステータスを送信しているためResponse.Redirect
、Server.Transfer
機能していません。