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

记录一下

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

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

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

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

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的配置。查找后发现是这个有问题


    GZipFilter
    gzip.GZipFilter
  
 
  
    GZipFilter
    /*.html
  

发现这个是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 也要检测一下代码的健壮性。



你可能感兴趣的:(工作记录)