最近在自己的电脑上测试发现,以前在各种环境下都运行正常的两款软件(asp.net开发的B/S结构软件),出现了莫名其妙的脚本错误,错误发生在通过右键菜单在系统中添加目录或用户的时候,估计是收到Ajax响应并进行处理时发生了问题。通过借助Httpwatch等工具调试发现,进行Ajax处理的服务器端页面运行正常,但客户端收到的Ajax响应内容却与服务端发送的内容不符,具体现象是响应字符串xmlHttp.responseText在客户端被截断了后面的一部分。
首先想到的是浏览器的兼容性问题、Ajax请求和响应的编码问题,但后来都逐一排除了。以关键字“xmlHttp.responseText 被截断”进行搜索,发现有不少人都遇到过这种现象,但都没有找到答案,无果而终,费了几个小时时间也没有任何进展。
下班后清醒了一下头脑,终于怀疑到了IIS方面,最先被怀疑的就是IIS压缩(这次没有走弯路了),打开IIS管理界面,取消默认网站的IIS压缩选项,但调试时又出现了配置错误,原来这种IIS设置的修改,它是以web.config文件的形式保存在网站根目录下的。删除这个文件后,直接到IIS的顶级设置中取消相关的压缩选项,再打开页面测试,发现问题已经没有了,一切正常。
看来,是IIS的压缩功能导致了输出的响应内容被截断了,至于为什么会出现这种问题,还没有去研究,希望有识之士补充一二。
如果需要再现问题现象,可到http://ldsoft.cc下载“工作任务管理系统”这款软件来安装,并进入用户管理界面进行添加用户操作。
附测试环境:Windows 7操作系统(IIS 7.5),IE 8.0浏览器,Asp.net 1.1程序运行环境,使用原始的XMLHttpRequest 对象方式来进行Ajax处理。