1

我们必须通过 URL 向 ASP.Net Web 服务发送一个大数据包。由于某些原因,我们不能使用 POST,因此我们对 XML 包进行 URL 编码,并向服务发出 GET 请求。

http://service.example.com/collect?content=AAAAAAAA...(+5000 characters)

服务响应

错误 404 - 找不到文件或目录。

我已经读到 max-content-length-exceeded 没有错误代码,所以 IIS 发回了这个 404 错误。知道了这一点,我通过以下方式更改了配置以允许大请求:

更改了查询字符串长度、最大 URL 长度、最大请求长度和停用验证

<httpRuntime 
    requestValidationMode="2.0" 
    maxQueryStringLength="262144000" 
    maxUrlLength="262144000" 
    maxRequestLength="262144000" />
...
<pages validateRequest="false" />
...
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="262144000" />
        </requestFiltering>            
    </security>
</system.webServer>

我仍然收到同样的错误。如何使用非常大/长的 URL 向我的 Web 服务发出请求?

更新 1

我不发送图像。内容是这样的:

<packet date="1243235246436">
    <param type="1" id="45">
        5
    </param>
</packet>

没有换行符和 URL 编码。

更新 2

在 IIS 请求过滤中将限制设置为更大的数字后,现在将 404 转换为

HTTP 错误 400。请求标头的大小太长。

这是因为现在标头的大小太大了。尝试通过添加 MaxFieldLength 和 MaxRequestBytes 注册表项来遵循本文中的说明但我仍然限制在 16k URL 长度。我该怎么做才能发送 1,000,000 个长 URL?这甚至可能吗?我该怎么做才能发送至少 65k 长的 URL?这是标头可以具有的最大长度,但没有考虑我的设置。

4

2 回答 2

2

maxQueryStringLength 的 MSDN 文档还讨论了在 URL 很长的情况下进行 IIS 过滤。你检查过这个吗?这里提到的属性名称有些不同:maxQueryString, maxUrl.

于 2013-05-25T09:27:15.713 回答
1

GET 请求仅受浏览器对 URL 字符串长度的限制。在 IE 中是 2,083 个字符,减去实际路径中的字符数。其他浏览器对 URL 字符串的长度没有明确定义的限制。这些文章可能对您有所帮助。

http://www.boutell.com/newfaq/misc/urllength.html

http://support.microsoft.com/kb/q208427

RFC 2616,“超文本传输​​协议——HTTP/1.1”没有指定对 URL 长度的任何要求,因此浏览器可以自由地规定他们认为合适的内容。

于 2013-05-25T11:10:01.233 回答