1

このコードでサーバーと通信するために HttpWebrequest (.Net 4.0) を使用しています。私の問題は、クライアントオブジェクトがリクエストの「ホスト」部分を小文字(私の場合は「TETRA_20」)に変換してから、ワイヤーに書き込むことです。したがって、サーバーはこの HTTP 要求を拒否します。

誰かが同様の問題に直面し、それを修正しましたか? これは .Net フレームワークの問題ですか?

HttpWebRequest client = (HttpWebRequest)WebRequest.Create(uri);
WebHeaderCollection myWebHeaderCollection = client.Headers;
client.SendChunked = false;

if (hostAlias != null)
   client.Host = "TETRA_20";
client.UserAgent ="Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0";                
client.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
client.KeepAlive = true;

myWebHeaderCollection.Set("Cache-Control", "max-age=0");
myWebHeaderCollection.Set("Accept-Encoding", "gzip,deflate");
myWebHeaderCollection.Set("Accept-Language", "en-US,en;q=0.5");

WebResponse responseData = client.GetResponse();
4

1 に答える 1

2

グーグルでこれを見つけました。RFC2616 (セクション 3.2.3) は、ホスト ヘッダーの評価は大文字と小文字を区別しない必要があると述べています。したがって、前に Host ヘッダーの値を小文字に設定することをお勧めします...

3.2.3 URI の比較

2 つの URI を比較して一致するかどうかを判断する場合、クライアントは、次の例外を除いて、URI 全体の大文字と小文字を区別するオクテットごとの比較を使用する必要があります。

  • 空または指定されていないポートは、その URI 参照のデフォルト ポートと同等です。
    • ホスト名の比較では、大文字と小文字を区別しない必要があります。
    • スキーム名の比較では、大文字と小文字を区別しない必要があります。
    • 空の abs_path は、"/" の abs_path と同等です。
于 2013-02-26T18:20:27.623 に答える