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

时间:2011-12-19 18:33:15

标签: c# http httplistener

我通过以下代码在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个字符,有人知道是否可能吗?

谢谢!

更新:我发现此限制似乎不在整个网址上,而是在单个目录名称上。我猜这与MAX_PATH有关,但我知道其他服务器可以处理这个问题,而且我已经看到了“野外”的实际链接,其目录名称是300多个字符(特别是对于链接而言)喜欢/ extern_js / f / rt).

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

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

1 个答案:

答案 0 :(得分:3)

除了在注册表中设置值之外,似乎没有任何其他方法。

转到HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parameters并创建名为UrlSegmentMaxLength的DWORD(32位)参数。将值设置为0,您将不再受长网址问题的困扰。

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

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