System.Net.HttpListener (c#)的最大URL长度

本文关键字:URL 长度 Net HttpListener System | 更新日期: 2023-09-27 18:18:13

我用c#用System.Net.HttpListener写了一个简单的服务器,通过以下代码:

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

我注意到,每当我发送的URL(在HTTP GET中)超过~255个字符时,我的服务器返回400(坏请求)HTTP响应。我对此做了一些研究,似乎没有标准,尽管大多数浏览器和服务器似乎可以处理至少~2000个字符。

有趣的是我的GetContextCallback()在这种方式失败时甚至从未被调用过。

我真的很想弄清楚如何配置这个支持大于255个字符,有人知道如果是可能的吗?

谢谢!

更新:我发现这个限制似乎不是针对整个URL,而是针对单个目录名。我猜这与MAX_PATH有关,但我知道其他服务器可以处理这个事实,我已经看到实际的链接"在野外",目录名称是300+字符(谷歌特别是链接/extern_js/f/........)。

更新:我正在使用telnet测试服务器,使用以下GET请求:

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

System.Net.HttpListener (c#)的最大URL长度

除了在注册表中设置一个值,似乎没有其他方法了。

转到HKEY_LOCAL_MACHINE'System'CurrentControlSet'Services'HTTP'Parameters并创建一个名为UrlSegmentMaxLength的DWORD(32位)参数。将该值设置为0,您就不会再为长url问题而烦恼了。

您必须在应用更改之前重新启动。

来源:http://support.microsoft.com/kb/820129