2009年9月8日火曜日

HTTP プロトコル違反

WebRequest を利用していると、

サーバーによってプロトコル違反が発生しました. Section=ResponseHeader Detail=CR の後には LF を指定しなければなりません。

と、WebException がスローされてしまいました。
ステータスは ServerProtocolViolation となっているので
HTTP プロトコル違反のようです。

調べたところ、古い CGI では改行を \n で記述されることが多く、
HTTP サーバーで \r\n に置換するべきところを \n のまま応答を返すので
厳密な .Net Framework の検証に引っかかっているとのこと。

というわけで、直すべきはサーバー側なのですが、
自前のサーバーに接続しているわけではなかったので
曲げて .Net Framework の方に少し馬鹿になってもらい、改行コードが \n でも
応答を受け入れるよう、アプリケーション構成ファイルに以下を追加。


  <system.net>
    <settings>
      <httpWebRequest useUnsafeHeaderParsing="true" />
    </settings>
  </system.net>


例外を出さず、処理を継続してくれました。

0 件のコメント:

コメントを投稿