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

标签 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 个字符,有人知道是否可行吗?

谢谢!

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

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

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

最佳答案

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

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

您必须重新启动才能应用更改。

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

关于c# - System.Net.HttpListener (C#) 的最大 URL 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565752/

相关文章:

c# - 将字符串转换为 float 并对其进行格式化 (C#)

C# - 从文件中读取特定字符串的字节

c# - 如果我不使用 IoC 容器,是否有比单例模式更好的选择来公开我的类的依赖项?

javascript - 从 HTTP 请求 header 中获取 cookie

http - 如何在我的动态 IP 上运行简单的 http 服务器?

c# - 如何在连接前获取MAC地址?

http - Haskell 找不到模块 `Network.HTTP.Conduit'

c# - 在 MonoTouch 上使用 HTTPS 的 HttpListener

c# - 如何将原始 HTTP 响应解析为 HttpListenerResponse?

c# - 当 url 没有以 "/"结尾时,如何使用 HttpListener?