我发现Last-Modified有的网页是取不到的,我想可能这个要服务器设置或者因为网页是动态的吧..
但是为什么Content-Length也会有取不到的情况呢?如果连内容的长度都不知道的话不是会有很多问题么?

解决方案 »

  1.   

    我可能是根Web服务器有关系吧,毕竟每个服务器的实现机制是不一样的。
      

  2.   

    是不是关键字写错了,以前我取referrer时就写错了,所以没取到
      

  3.   

    确实有很多读不到Content-Length的情况
    如果遇上这种情况 就看socket是否读完 来判断是否退出我用c写过这样的程序,希望对楼主有些帮助
    char dlbuf[512];
    size_t sz;
    while ((sz = fd_read (fd, dlbuf, sizeof(dlbuf), timeout)) > 0)
    {
       //...
    }
    每次读入512个.如果读不出来了就说明没内容了其实我总感觉Content-Length提供的值不会太可靠。(个人感觉而已)
      

  4.   

    答:不明白楼主的意思啊。楼主的意思是不是说:有些网页,在读取它的HTTP响应头时,取不到Last-Modified这个响应头信息?Content-Length头也不一定所有的网页都有啊(只有服务器返回的网页中有HTTP BODY的数据时,服务器才会设置啊)
      

  5.   

    其实我是在做个爬虫程序,本来打算根据http header的一些信息来判断页面是否更新过.最开始是想用last-modified来判断,但是好多都没有这个信息,想想content-length总应该都有吧..发现也还是有没有的...比较郁闷.
    to:jiangnaisong 
    你说的"只有服务器返回的网页中有HTTP BODY的数据时,服务器才会设置啊"是什么意思?
      

  6.   

    答:Content-Length头也不一定所有的网页都有啊。比如:响应头含有:Transfer-Encoding协议头时,它就还会发送Content-Length协议头了。还有其它情况,也是不发送Content-Length协议头的。
      

  7.   

    有些网页是以 chunked 方式传输的,就没有 Content-Length 了。替你搜到一篇文章,先看看吧:http://www.cnpaf.net/class/HTTP/0532918532696341.html另外,LZ 想的这个办法并不是针对你的问题的“正宗”的办法。建议仔细研究一下 HTTP 协议吧,“如何判定内容是否修改过”是 HTTP 协议的一个专项内容。