Максимальная длина URL с System.Net.HttpListener (C #) - PullRequest
2 голосов
/ 19 декабря 2011

Я написал простой сервер с использованием System.Net.HttpListener в C # с помощью следующего кода:

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

Я заметил, что мой сервер возвращает ответ HTTP 400 (неверный запрос) всякий раз, когда URL-адрес, который я отправляю (в HTTP GET), превышает ~ 255 символов. Я провел некоторое исследование по этому вопросу, и похоже, что нет никакого стандарта, хотя большинство браузеров и серверов, по-видимому, обрабатывают как минимум ~ 2000 символов.

Самое смешное, что мой GetContextCallback () никогда даже не вызывается, когда происходит сбой таким образом.

Я действительно хотел бы выяснить, как настроить это для поддержки более 255 символов, кто-нибудь знает, если это возможно?

Спасибо!

Обновление: я обнаружил, что это ограничение не для всего URL, а для отдельного имени каталога. Я предполагаю, что это как-то связано с MAX_PATH, но я точно знаю, что другие серверы могут справиться с этим, и я видел реальные ссылки «в дикой природе», которые имеют имена каталогов более 300 символов (Google, в частности, для ссылок как /extern_js/f/........).

Обновление: я тестирую свой сервер с помощью telnet, используя следующий запрос GET:

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

1 Ответ

3 голосов
/ 14 декабря 2012

Похоже, что нет другого способа, кроме установки значения в реестре.

Перейдите в HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parameters и создайте параметр DWORD (32-разрядный) с именемUrlSegmentMaxLength.Установите значение 0, и вас больше не будут беспокоить проблемы с длинными URL-адресами.

Вы должны перезагрузить компьютер, прежде чем применить это изменение.

Источник: http://support.microsoft.com/kb/820129

...