2009-06-26 15 views
0

HttpWebRequestは、基本認証を使用してASP.NETサイトからファイルをダウンロードするために使用されます。多くの場合、すべて正常に動作しますが、401ステータスコードの回答がチャンクされていると、一部のプロキシで回答がチャンクされ、HttpWebRequest.GetResponse()が例外をスローします。例外は次のとおりです。私は、テストを行い、Transfer-Encoding: chunkedは例外の一つの理由であることが判明HttpWebRequestとTransfer-Encoding

System.Net.WebException: The server committed a protocol violation. 
    Section=ResponseStatusLine 
    at System.Net.HttpWebRequest.GetResponse() 
Trace of answer is:<pre> 
"HTTP/1.1 401 Authorization Required\r\nDate: Fri, 26 Jun 2009 04:45:18 GMT\r\nServer: Microsoft-IIS/6.0\r\nX-Powered-By: ASP.NET\r\nX-AspNet-Version: 2.0.50727\r\nWWW-Authenticate: Basic realm=\"iis-server\"\r\nCache-Control: private\r\nContent-Type: text/html; charset=iso-8859-1\r\nVia: 1.1 server\r\nKeep-Alive: timeout=15, max=100\r\nConnection: Keep-Alive\r\nTransfer-Encoding: chunked\r\nContent-Language: en\r\n\r\n0\r\n\r\n0\r\n\r\n 

。 .NET Framework 2.0のこのバグですか、それとも401の答えがチャンクされてはいけないというRFCがありますか?

+0

この問題は、特定のプロキシまたは特定のファイルで発生しますか? –

答えて

1

実際には、チャンク転送符号化(CTE)が許可されていないというエラーではないと私は思うのですが、サーバーがCTEを間違って実行していると思います。レスポンスボディを見ると、次のようになります。

Language: en \r\n 
\r\n 
0 \r\n 
\r\n 
0 \r\n 
\r\n 

応答ボディには2つの長さのチャンクがあります。 CTE RFCは、メッセージの最後のチャンクが0の長さのチャンクであることを要求します。また、前のチャンクの長さはゼロではありません。このメッセージでは、CTEのプロトコル違反である長さ0のチャンクがあります。

これは、メッセージのコンテンツ長ヘッダーを設定し、そのコンテンツ長ヘッダーで許可されている以上のデータを送信するのと同じです。