0

301はserver.transferを介して送信されますか?

PageA.aspx:

protected void Page_Load(object sender, EventArgs e)
    {
        Response.Status = "301 Moved Permanently";
        Server.Transfer("/pageB.aspx");
    }
4

1 に答える 1

1

の後にリダイレクトする必要がある場合は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.RedirectServer.Transfer 機能していません。

于 2012-06-14T18:48:01.813 に答える