我通过以下代码在 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 问题所困扰。
您必须重新启动才能应用更改。
关于c# - System.Net.HttpListener (C#) 的最大 URL 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565752/