x64上的IIS 6和长URL

在Windows 2003 x64上托pipe的网站上有一个非常长的URL,如下所示:

http://myhost/a_very_very_long_url_around_300_chars_long 

(即一个单一的,很长的300字左右)

问题是,我从HTTP.SYS(它甚至没有达到IIS)得到一个400错误的请求响应。 我可以告诉,因为这些请求显示在system32\LogFiles\HTTPERR ,例如:

 2009-09-17 19:51:29 200.123.179.9 3636 192.168.129.50 80 HTTP/1.1 GET /a_very_very_long_url_around_300_chars_long 400 - URL - 

我试图在registry中设置UrlSegmentMaxLength ,这可以修复Windows 2003 x86机器上的问题,而不是在x64生产服务器上。 我在另一台Win2k3 x64服​​务器上试了一下,也失败了。

任何提示?

由于您在HTTPERR日志中看到错误,因此这不是URLScan问题 – HTTP.sys并未将URL移交给IIS,因此URLScan ISAPI筛选器将不会运行。

从另一篇Windows IT专业文章中 ,HTTP.sys接pipe了URLScan,以解决有关URL和段长度的大多数问题,并且您在检查HTTP.sysregistry项方面是正确的。

有趣的是,我可以改变这一点,但由于MAX_PATH问题和元数据库限制,导致物理目录或虚拟目录很长时间出现问题。

如果您正在使用重写工具,则实际上可能存在仅在x64实用程序中显而易见的问题,或者x86和x64如何解释该URL之间的细微差别。

最终我迁移到Windows 2008 R2(IIS 7.5)x64和应用UrlSegmentMaxLength变化,它的工作。 所以我猜这是在Windows 2003 x64中的一个错误…

首先确保你使用的是最新版本的URLscan(在这里find)

然后确保以下条目位于urlscan.ini中,如果您需要增加它们(MaxUrl超过300),则可以这样做:

; 有3种特殊情况限制:
;
; – MaxAllowedContentLength指定允许的最大值
; Content-Length请求头的数值。 对于
; 例如,将其设置为1000会导致任何请求
; 内容长度超过1000则会被拒绝。
; 默认是30000000。
;
; – MaxUrl指定请求URL的最大长度,
; 不包括查询string。 默认是260(哪个
; 相当于MAX_PATH)。
;
; – MaxQueryString指定查询的最大长度
; 串。 默认是2048

MaxAllowedContentLength = 3000
MaxUrl = 260
MaxQueryString = 2048