首先简单介绍下测试的产品:该产品为CS结构,由2个窗口组成,其中B窗口嵌入了ie,用它来访问网页。
某同事反应使用我们的产品,在B窗口中点击某页面的“标签”字段后,后续的搜索结果页面无法显示。然而在自己和其他同事的机器上都没有该情况出现,请同事做如下操作:
第一步,请该同事在ie中访问同样的页面,点击“标签”字段后发现同样不能显示页面。使用httpwatch抓包,发现返回的http状态码为403,于是可确定不是由于页面项(js,css)加载顺序以及操作系统/IE版本等导致搜索页无法显示,因为403表示:"(禁止) 服务器拒绝请求。"
第二步:请同事在cmd窗口ping 搜索CGI的域名,能成功收到应答。
第三步: 请同事使用firefox访问同样的页面,点击“标签”能成功进入后续的搜索页面。结合“步骤二”可判定server端没有禁止同事机器的访问。ie下不能访问搜索页面,可能是包头中存在特殊字符串导致。
第四步: 请同事把httpwatch中抓到的user-agent字段的值copy出来,发现里面有”baiduxxx“的字段。
至此,找到问题产生的原因。由于搜索cgi所在的apache配置了禁止baidu,google等爬虫的访问,但对爬虫关键字的过滤采用了模糊匹配,而该同事正是由于安装了“百度硬盘搜索”,使得user-agent中增加了“baiduXXX”的字样。让开发修改过滤规则为完全匹配后,问题解决。
可见,了解http请求响应码的含义能够更准确的定位问题所在