如果网站设置ARR引发了HTTP 400.605错误代码,一般都是IIS上服务器级别的URL重写语法错误,可以通过禁用或者修改对应的URL重写规则来测试网站能否恢复正常。其实仔细查阅错误信息,不难看出问题的源头在于URL重写语法错误,导致请求不断递归相同的路由!
先贴下错误信息和截图:
HTTP 错误 400.605 – Bad Request
The request cannot be routed because it has reached the Max-Forwards limit. The server may be self-referencing itself in request routing topology.
可尝试的操作:
创建跟踪规则以跟踪此 HTTP 状态代码的失败请求。有关为失败的请求创建跟踪规则的详细信息,请单击此处。
详细错误信息:
模块 ApplicationRequestRouting
通知 MapRequestHandler
处理程序 ApplicationRequestRoutingHandler
错误代码 0x00000000
详细信息
由于语法错误,服务器无法理解此请求。
注意上图中红框部分,再对错误信息进行分析,已经可以确定问题来源是ARR模块请求异常导致,主要是URL重写规则的语法错误,才会引发这个400.605错误。建议采用排除法,先禁用所有ARR规则,逐步排查找出有语法问题的规则。
我遇到的情况如下:有一个要进行ARR重写操作的URL,由于设置错误,原本的主机头/IP地址与重写的URL一模一样,端口也一样,结果设置后网站立即引发HTTP 400.605错误。我猜测是由于递归请求相同的路由才引发的,因为ARR是属于服务器级别的URL重写,所以一定要留意重写的URL不能与原本的URL重复(端口和IP地址特别留意)。如果需要操作相同的IP/端口/域名,直接使用网站级别的重写操作即可。
出于某些谨慎的考虑,可以在重写条件加入过滤,例如排除自身的端口号之类的,等于多加了一层保险:
官方资料对400.605的描述是最大转发数量超出限制,其实我自己也不太明白具体的意思:
总之对于应用程序请求路由,还是有待深入研究。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98913.html