今天碰到一个问题,一个ajax的请求,给了tiandi一个404的错误提示,本地测试,则毫无问题,改的代码是Ecshop礼品卡发放的后台程序,原程序是配置礼品卡对应的可兑换商品时需要选中该礼品卡,这就导致了如果该种礼品卡数量很多,比如1000张的话,分页显示每页20张,虽然每页都有全部选中按钮,但就算如此,也需要翻50页之后才能处理完毕,这样的操作其实很反人类。
于是tiandi将它改成选择该礼品卡中的任意一张,即可配置所有的礼品卡,但是由于原程序是ajax的,所以需要调整一下代码将所有的参数都传递过去,包括1000张礼品卡的ID号,这样导致post的页面相当的长。初步怀疑是URL长度的问题,和同事sky小讨论了一下,他也感觉是同样的问题,于是从这一方面着手下去,发现本地是WAMP环境,而服务器是IIS(关于服务器为啥是windows,而不是linux的问题,tiandi无力吐槽了,tiandi来的时候就已经是windows的生产环境了。。。)
网上查询了一下资料,URL的长度和浏览器也有关系,tiandi用的chrome,支持的长度在8000左右,IIS尼妹的URL限制长度竟然默认只有2048,而这次的ajax提交的url大概是3000-5000之间。好吧,上服务器看IIS的配置,结果发现愣是没发现哪个是配置URL长度的,再次问google,得出的结论是直接改文件,文件位于%windir%\system32\inetsrv\config\applicationhost.config,直接在配置文件里加以下代码:
<system.webServer> <security> <requestFiltering> <requestLimits maxQueryString="40800" /> </requestFiltering> </security> </system.webServer>
但是不要乱加,有的config里已经有security,并且也有requestfiltering子项目了,你懂的。。。所以不能直接复制过去,否则IIS奔溃是免不了的。修改是即刻生效的,无需重启IIS。