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

Loc*_*eyu 4 c# http httplistener

我通过以下代码在 C# 中使用 System.Net.HttpListener 编写了一个简单的服务器:

Listener = new HttpListener();
Listener.Prefixes.Add(Prefix);
Listener.Start();
Listener.BeginGetContext(GetContextCallback, null);
Run Code Online (Sandbox Code Playgroud)

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

有趣的是,当我的 GetContextCallback() 以这种方式失败时,它甚至不会被调用。

我真的很想知道如何配置它以支持大于 255 个字符,有谁知道是否可能?

谢谢!

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

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

GET /013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789013456789/test.html
Host: 10.15.38.80:8008
Accept: */*
Run Code Online (Sandbox Code Playgroud)

Jan*_*mer 5

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

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

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

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