我在Windows Server 2012 R2(IIS版本8.5.9600.16384)中托管了ASP NET 4.5应用程序。但偶尔我会收到错误,如错误请求-无效 predicate HTTP错误400。从一个页面转到另一个页面时,请求 predicate 无效。我收到此错误的地方没有特殊序列或特定页面。
httperr日志文件显示如下错误
2015-01-21 04:48:18 MyIP 55452 ServerIP 80 - - - 400 - Verb -
2015-01-21 04:48:20 MYIP 55454 SerevrIP 80 - - - 400 - Verb -
我检查了这个帖子http://support.microsoft.com/kb/828726,但这里它适用于Microsoft Internet信息服务(IIS)6.0。我可以为iis 8.5做这个修补程序吗?我已经在互联网上搜索了这个问题,但没有得到实质性的信息。所以,有人能帮助我解决这个问题吗?
使用Fiddler,我获得了请求的原始数据,如下所示
POST http://example.com/Project.aspx?prj=5566 HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Length: 30634
Cache-Control: max-age=0
Authorization: Negotiate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://example.com/Project.aspx?prj=5566
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: ASP.NET_SessionId=4oymd5odmcaluiuzc24tbx22; _gat=1; _ga=GA1.2.1888408676.1418017144
Windows Server 2012 R2的请求筛选设置为
任何帮助都将不胜感激。
2条答案
按热度按时间vql8enpb1#
尝试添加
到您的aspx页面。看起来Chrome在IIS需要请求 predicate 的地方添加了视图状态。
你可能会有一些运气与此:Fix HTTP.sys
f2uvfpb92#
400状态代码
400状态表示“错误请求”。因此这不是服务器端问题。请求有问题。在到达IIS之前格式不正确
如果子状态代码不是0,则更容易排除故障。例如,如果是1,则表示“目标标头无效”。如果是2,则表示“深度标头无效”。下面是full list of status codes。
如果您在sc-win32-status中看到值64,则表示存在与网络相关的问题。它指的是“指定的网络名称不再可用”。发送响应后,IIS将等待来自客户端的ACK包。如果客户端重置连接而不是发送此包,IIS将记录64代码,因为这不是正常的连接关闭。
检查HTTPERR日志是否有相同的时间戳。在我的例子中,我看到了Timer_EntityBody错误,这意味着“连接在请求实体主体到达之前过期”。
建议事项
来源:Status Code 400 with 64 in sc-win32-status column