2011-12-19 15 views
2

私は次のコードを経由してC#でSystem.Net.HttpListenerを使用して単純なサーバーを書かれている:URLの最大長(C#の)

Listener = new HttpListener(); 
Listener.Prefixes.Add(Prefix); 
Listener.Start(); 
Listener.BeginGetContext(GetContextCallback, null); 

私は私のサーバーは400を返すことに気づきました(Bad Request)私が(HTTP GETで)送信するURLが〜255文字を超えるたびに、HTTP応答が返されます。私はこれに関するいくつかの調査を行っており、ほとんどのブラウザとサーバーは少なくとも〜2000文字を処理するようですが、標準は存在しないようです。

面白いことに、私のGetContextCallback()はこのように失敗した場合でも呼び出されることはありません。

これは255文字を超える文字をサポートするように設定する方法を本当に知りたいですか?

ありがとうございます!

更新:この制限は、URL全体ではなく個々のディレクトリ名にあるように見えます。私はこれがMAX_PATHと関係があると推測していますが、他のサーバーがこれを処理できるという事実を知っています。そして、実際には300文字以上のディレクトリ名を持つ " like/extern_js/f/........)。

更新:

GET /013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789/test.html 
Host: 10.15.38.80:8008 
Accept: */* 
+0

私はちょうど800を超える文字の文字列で、ブラウザからテストし、それがうまく働きました。 HTTP GETに使用しているコードを投稿できますか? –

+0

私は実際にテストするためにコードを使用していない、私はテルネットを使用しています。元の投稿を更新して、HttpListenerを壊すパス(400の戻りコード)を含むようにしました。 – Locksleyu

+0

あなたはそうです、間違いなくフォルダの制限です。一部のサイトでサポートされているようです(google.comに問題なくURLを投稿できます)が、他のサイトでは無効です(Microsoft.comは無効なURLエラーを返します)。質問になると、本当にフォルダ名に多くの情報が必要ですか? 1つのサブフォルダを追加して半分に分割すれば、それでも機能します。私は、フォルダレベルを小さく保ち、クエリ文字列にデータを置くことをお勧めします。 –

答えて

3

は、他の方法が、レジストリの値を設定することがあるように思えません。私は、次のGETリクエストを使用して、telnetのと私のサーバーをテストしています。

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parametersに移動し、UrlSegmentMaxLengthという名前のDWORD(32ビット)パラメータを作成します。値を0に設定すると、長いURLの問題に煩わされることはありません。

変更を適用する前に再起動する必要があります。

出典:http://support.microsoft.com/kb/820129

関連する問題