您的位置:首页 > 理论基础 > 计算机网络

有关HTTP 返回200状态码 没有返回数据的小问题。

2013-10-13 05:00 381 查看
记录一下

前不久,公司网站验证百度的统计工具时,发现无法验证成功,是各种找问题。后找了一人,在他的带领下发现问题所在。

首先是网站首页和二级目录的页面都无法验证代码,提示无法访问目标服务器,或目标服务器拒绝。但是奇葩的是三级目录下面的所有页面可以验证到代码存在。

将首页只保留验证代码也无法检测到。

首先,打开网站的访问日志。然后清空日志,再在百度统计页面点击验证网站发出请求,然后查看访问日志里面的记录

Line 1432: 111.206.36.146 - - [08/Oct/2013:17:33:20 +0800] "GET / HTTP/1.0" 301 0 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
Line 1433: 111.206.36.18 - - [08/Oct/2013:17:33:20 +0800] "GET / HTTP/1.0" 200 0 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"


然后在根目录下建立个test文件夹用来做测试,建立一个test.htm 的文件,将验证代码copy。然后验证,发现可以验证到代码的存在,然后将文件改成test.html发现无法验证。

看了下网站的web.xml的配置 查找过滤器过滤.html的配置。查找后发现是这个有问题

<filter>
<filter-name>GZipFilter</filter-name>
<filter-class>gzip.GZipFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>GZipFilter</filter-name>
<url-pattern>/*.html</url-pattern>
</filter-mapping>


发现这个是HTTP1.0的协议 其他HTTP 1.1的可以。开始怀疑是HTTP1.0的问题。然后抓了个包分析了下。百度的请求是基于HTTP1.0协议里面没有Accept Encoding 。

然后在源代码中找到过滤器中对于Accept Encoding 的设置和处理 发现了一个问题

private static boolean isGZipEncoding(HttpServletRequest request){
39.    boolean flag=false;
40.    String encoding=request.getHeader("Accept-Encoding");
41.    if(encoding.indexOf("gzip")!=-1){
42.      flag=true;
43.    }
44.    return flag;
45.  }


代码里面对于encoding为空没有判断为NULL 做处理。找到问题所在。解决。OK.

最后发现这个GZIPFILTER的代码出处。JSP Filter,GZIP压缩响应流

最后,建议不能随意COPY别人的代码。即使COPY 也要检测一下代码的健壮性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息