我们必须通过URL向ASP.Net Web服务发送一个大包。我们不能出于某些原因使用POST,所以我们是对XML包进行URL编码,我们向服务发出GET请求。
http://service.example.com/collect?content=AAAAAAAA...(+5000 characters)
服务以
响应错误404 - 找不到文件或目录。
我已经读过没有超出max-content-length的错误代码,因此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注册表项来遵循this文章中的说明,但我仍然限制在16k URL长度。 我该怎么做才能发送1,000,000个长URL?这甚至可能吗?如何发送至少65k长的URL?这是标头可以拥有的最大长度,但我的设置不予考虑。
答案 0 :(得分:1)
maxQueryStringLength的MSDN文档还讨论了在URL非常长的情况下进行IIS过滤。你检查过this了吗?
提到的属性名称略有不同:maxQueryString
,maxUrl
。
答案 1 :(得分:0)
GET请求仅受浏览器对URL字符串长度的限制。 在IE中它是2,083个字符,减去实际路径中的字符数。其他浏览器没有明确定义URL字符串长度的限制。这些文章可能对您有所帮助。
RFC 2616“超文本传输协议 - HTTP / 1.1”没有指定对URL长度的任何要求,因此浏览器可以自由地规定他们认为合适的内容。