次のケースを検討してください。
- Web サーバーが .NET アプリを実行しています
<sessionState cookieless="AutoDetect" />
。 - クライアントは、単純な
HttpWebRequest
(Cookie なし) を使用してデータを送信しています。
この一見単純なケースは、大きな失敗を引き起こします。
.NET は、要求元のエージェント ( ) が Cookie をサポートしているかどうかを判断できないためHttpWebRequest
、POST 要求に対して、次のように同じ場所への 302 Found リダイレクトで応答します。
AspxAutoDetectCookie
応答で指定された CookieAspxAutoDetectCookie
転送された場所で指定されたクエリ パラメータ
要求元のエージェントは、新しい場所を要求することになってHttpWebRequest
います。.NET は、クエリ文字列を確認すると、これが再要求であることを認識し、指定された Cookieが要求ヘッダーにあるAspxAutoDetectCookie
かどうかを確認することで、Cookie がサポートされているかどうかを判断できます。AspxAutoDetectCookie
問題は、ほとんどのリクエスト エージェント (Web ブラウザHttpWebRequest
) が 302 Found を 303 See Other であるかのように扱い、元の HTTP メソッドに関係なく、再リクエストを GET にすることです! 最初の POST 要求で送信されたデータは転送されません。
正しい応答は、要求メソッドを変更しない 307 一時リダイレクトである必要があります。(場所 X への POST 要求は、場所 Y へのPOST要求にリダイレクトされます。)
POST 要求が破棄されないように、.NET でこの動作を変更する方法はありますか?