关于 http的ETag和last-modified的问题啊

最近在学习爬虫的相关知识啊,但是遇到了个问题,

比如我想爬取一个网站,

我先把这个网站的信息爬取下来

然后记录下来

等下次我再来爬取的时候,我先对比一下这个网页的ETag和last-modified的值如果没改变的话我就不用爬取了啊

但是我发下很多网站都没有ETag和last-modified属性

这怎么办啊。。。。。。。。。。。。。。

另外求大声能详细的讲解一下ETag和last-modified属性的意义啊

还有啊,为什么我自己弄的在tomcate上面的工程爬取下来也是没有这两个属性的啊。。。。。。。

谢谢了啊。。。。。。

3个回答

ETag是一个可以与Web资源关联的记号,通过它可利用客户端的缓存,一般把ETags和GET请求的“If-None-Match”头一起使用。服务器首先产生ETag,客户端则将他与页面一起缓存起来,服务器可在后面使用它来判断页面是否是同一个样的页面!像楼上说的一样,他是通过MD5来处理的,具体百度下吧~~ 其实你可以得到页面的大小来判断是否是同一个页面,但是不保险,偷懒的代价!

没做过爬虫,但这两个属性可能是指最后一个标签(end tag)和最后修改时间(last modified)。如果想知道网页有没有变化,可以把爬下来的东西做一次MD5,和上一次爬下来的DM5作比较。如果有变化就说明需要重新抓取。
希望能帮到你。

因为ETag本来就不一定必须要的啊,这是可以有,而不是必须有!!呵呵

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Caching HTTP Headers, Last-Modified and ETag
NULL 博文链接:https://wutaoo.iteye.com/blog/409276
HTTP(Ⅵ)—— 缓存验证Last-Modified和Etag的使用
一、先看一张图 浏览器创建一个请求,然后请求到达本地缓存,如果找到了则直接返回给浏览器,如果没有,可能会经过代理服务,然后去代理缓存中去找,如果命中,则直接返回,如果没有,才会到源服务器进行请求。 二、数据如何进行验证,有两个头。 1、Last-Modified上次修改时间,它配合If-modified-Since和If-Unmodified-Since使用。如果我们请求一个资源,这个资...
http协议-缓存控制:etag If-None-Match / Last-Modified If-Modified-Since
NULL 博文链接:https://hyj1254.iteye.com/blog/1161000
服务端的缓存验证 Last-Modified和Etag
Last-Modified 上次修改时间 配合If-Modified-Since或者If-Unmodified-Since使用 对比上次修改时间验证资源是否需要更新 ETag 数据签名 典型做法:对资源内容进行hash计算 配合If-Match或者Id-Non-Match使用 对比资源的签名判断是否使用缓存 缓存验证流程 在浏览器和服务端设置都允许缓存策略的前提下(服务端响...
HTTP 协议中缓存处理机制(Expires、Last-Modified、ETag
  应用场景 了解 HTTP(我们这里说的是 HTTP/1.1) 协议中缓存的处理机制,会对网站优化有些许帮助,例如会应用到:加速网站的加载,服务器端与浏览器文件及时同步。 浏览器请求 URL 时,根据 HTTP 协议的规定,浏览器与服务器会通过报头(HTTP Request Header、HTTP Reponse Header)进行交流,并根据其协议中和缓存的相关字段(Expires...
ETag与Last-Modified头信息用途上的区别
按照HTTP标准,Last-Modified只能精确到秒级。ETag的出现可以很好的解决这个问题。在用途上,ETag常与 If-None-Match或者If-Match一起,由客户端通过HTTP头信息(包括ETag值)发送给服务端处理。ETag使用如下: Get /Order/36 Http1.1 If-Match:"22FAA065-2664-4197-9C5E-C92EA03
http last-modified字体头
http last-modified字体头
Http Etag 技术分享
Etag http If-None-Match If-Modified-Since Last-Modified 使用Demo 已经可以直接使用
HTTP请求——ETag
【参考】 百科ETag
HTTP缓存 Last-Modified 服务端实现
  针对图片资源,根据http协议的缓存机制,进行了服务器更新处理,但遇到了个小问题,一直还没搞清楚的.见代码备注.   package com.g3net.servlet; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; impor...
同一个文件的etag值和last-modified time为什么不停地在变呢?
同一个文件的etag值和last-modified time为什么不停地在变呢?rn是不是和服务器有关?rn另外last-modified time的变化范围很小,而且都是很久以前的时间?rn好奇怪啊。rn例如:rnLast-Modified: Tue, 14 Dec 2004 19:57:13 GMTrnETag: "505941a17e2c41:ba1"rnrnLast-Modified: Tue, 14 Dec 2004 19:58:47 GMTrnETag: "4da05217e2c41:a78"rnrn其他数据都一样。rn那位大侠帮帮忙,100分就送了。
关于Etag
浏览器在向服务器进发送一个请求的时候,浏览器会首先进行缓存过期判断,其通过设置的缓存过期时间来判断文件是否过期 一共分为以下几种情况: 1.未过期。这种情况下不向服务器发送请求,直接进入缓存读取。此时服务器会返回一个200OK from Cache。这种情况下浏览器和服务器之间不存在交互。 2.过期的情况。这种情况下浏览器会向服务器发送请求,并带上1中设置的文件修改时间和Etag。然
(疑难)哪位大侠能讲解一下etag与last-modified 区别
哪位大侠能讲解一下etag与last-modified 区别?rnrn谢谢!
HTTP协议:页面缓存之Cache-Control 和 Etag
Cache-Control是HTTP协议的一部分,是在请求和响应中必须服从的指令,通常用于提高页面加载,阻止页面缓存对请求和响应造成不利的干扰。 Cache-Control 为单向指令,即请求中存在的指令,并不意味着响应中存在同样的指令 一、请求 1. Cache-Control RFC:7234#5.2.1 Request Cache-Control Directives ...
ETag —— http缓存和静态优化
Cache-Control和ETag :https://www.jianshu.com/p/3e2afe089e11 ETag详解: https://blog.csdn.net/xmloveth/article/details/52291760 HTTP协议缓存策略深入详解之etag妙用: https://blog.csdn.net/wanywn060/article/details/836078...
Emacs 的etag问题
在当前文件夹下创建了 一个tags文件,在Emacs中可以用 C-. 跳转到相应的函数定义上,不知道有没有 返回调用处的命令。rn以前用Vim, 是用 ^] 跳转到定义, 而后 ^o 来返回到调用处。刚接触Emacs,请各位指点
Etag 笔记
用于标识出资源的状态。当资源发生变更时,如果其头信息中一个或者多个发生变化,或者消息实体发生变化,那么ETag也随之发生变化。 ETag常与If-None-Match或者If-Match一起,由客户端通过HTTP头信息(包括ETag值)发送给服务端处理。ETag使用如下:request headers...... If-None-Match: "3c64e7a072b3b57e100c96134e
关于CSS,JS文件缓存与ETAG问题
有些网站在ASPX页面用以下链接的形式调用并合并多个CSS或JS文件,如果不加上版本号,用户浏览器缓存,怎么实现更新呢?rn rnrn一般是加版本号,例如http://css.test.com/index.css?v=1这种形式来通知客户端更新,像上面的方式,如果不加版本号怎么通知客户端CSS文件更新了呢?
ETag使用
关于ETag相关知识:https://blog.csdn.net/kikikind/article/details/6266101 https://blog.csdn.net/jkxiaoxing/article/details/51499894具体代码:String clientEtag = request.getHeader("If-None-Match"); if (md5....
急急~!奇怪的Last-Modified
用get_headers 获得远程xml的headers信息rn本来设计的作用是,判断Last-Modified的时间,如果相等就不要执行加载内容了rn可是奇怪的是Last-Modified的时间在不停的变化,可是事实上远程的文件并没有变化rn注:总是在两个时间间跳来跳去,rn比如:第一次是 Last-Modified: Sat, 08 Jul 2006 18:56:43 GMTrn第二次却成了:Last-Modified: Sat, 08 Jul 2006 18:47:27 GMTrnrn这个是什么原因,请高手指教!!
Nginx自定义ETag算法
Nginx基于 nginx-static-etags 三方模块自定义ETag算法nginx-static-etags模块源码:https://github.com/mikewest/nginx-static-etags.git 基于此模块,修改其ETag生成算法。 现改为请求所访问文件的MD5值,代码:https://github.com/z360394624/nginx-static-etag
Node.js中的etag包知识学习之express的配置etag
原文地址 :阅读原文   API为:etag(entity, [options])    这个方法为给定的实体产生一个strong etag。这个方法必须获取这个实体的完整内容。可以是Buffer,可以是fs.Stats。默认情况下,这个strong etag的产生是不需要fs.Stats的,因为这个fs.Stats会产生weak Etag而不是strong etag,不过这种默认行为可以通过
怎么在asp.net Http header信息里面强制增加Last-Modified
动态内容的HTML输出通常没有Content-Length和Last-Modified.这导致我前端的squid缓存服务器每次都需要刷新一下才能显示出变更后的内容。我的生成是用的override Render 中的HtmlTextWriter 生成的。请高手指点。
响应首部:ETag
首部字段ETag能告知客户端实体标识.它是一种可将资源以字符串形式做唯一性标识的方式.服务器会为每份资源分配对应的ETag值. 另外,当资源更新时,ETag值也需要更新.生成ETag值时,并没有统一的算法规则,而仅仅是由服务器来分配. ETag:"usagi-1234"...
后台ETAG校验逻辑
# Created by Jerry Wang, last modified on Jul 27, 2015 修改了lead的数据之后点击save button,首先从后台重新读取一次lead的数据: ![clipboard1](https://user-images.githubusercontent.com/5669954/27771109-bab1f31e-5f48-11e7-9e79-...
HTTP协议中的ETag项是根据什么产生的??
如题!
解读前端性能优化之“配置ETag”
1、什么是ETag? 实体标签(EntityTag)是唯一标识了一个组件的一个特定版本的字符串,是web服务器用于确认缓存组件的有效性的一种机制,通常可以使用组件的某些属性来构造它。(总结:实体标签是web服务器和浏览器用于确认缓存组件的有效性的一种机制。) 条件GET请求 浏览器下载组件的时候,会将它们存储到浏览器缓存中。如果需要再次获取相同的组件,浏览器将检查组件的缓
YSlow—— 配置ETag
  ETag简介 实体标签(Entity Tag),是server和browser确认缓存组件的有效性的一种机制。 个人觉得,如果Expires是时间戳,ETag类似版本戳。 【见下图】: ETag带来的问题 ETag的问题在于,通常用组件的某些属性(大小、时间、等)来构造它,这些属性对于特定的、寄宿了网站的服务器来说是唯一的。 当浏览器从一台服务器上获取了原...
关于ETag和Gzip的基本认知和使用
题引:为了提升用户体验,同时减轻服务器压力和降低网络带宽,技术总监和技术经理决定对APP做缓存处理,包括图片的三级缓存(这里不讨论)和网络请求的数据缓存 ETag的基本认识 ETag的基本使用 Gzip的基本认识 Gzip的基本使用 判读服务器是否返回压缩数据的方式 服务端Nginx配置ETag和Gzip冲突的解决方案 Refer 一、ETag的基本认识以下四篇文章讲解的都是ETag的基本知识:
远程服务器上文件的Last-Modified 格式化
URL urlA = new URL(url); HttpURLConnection urlcon = (HttpURLConnection) urlA.openConnection(); String lastModified = urlcon.getHeaderField("Last-Modified"); if(StringUtils.isNotBlank(lastModified)){
70503-3149 etagère 3 bacs.pdf
70503-3149 etagère 3 bacs.pdf
Fiori里前后台ETAG处理
以opportunity为例来简单说明前后台需要做哪些开发才能够支持ETAG。详细的代码和DDIC enhancement参考Opp相关object。 1. 当UI上点击note tab时,所有的complex note包括其ETAG由后台返回给前台。这里的ETAG实际就是note的last change timestamp。 该ETAG由后台从db里取出,返回给前台 ![cli...
nginx 升级并配置etag
1,获取nginx的编译参数 nginx -V     //获取nginx的编译参数 -with-http_flv_module --add-module=../nginx-static-etags/ --add-module=../ngx_cache_purge-2.1   2,安装扩展 a,nginx-static-etags git clone git://github.com...
100分请教ETAG的配置
rnrn 100分请教ETAG的配置
关于HTTP连接的问题
最近做doja平台,资料太少了。rn 其中有一行获取网络连接的代码,程序怎么都执行不到第2步,控制台也没报错,而且程序也没有阻塞(我在stat()方法中调用了这个方法获取连接,该方法后面的代码都执行了)。找不出问题在哪,困扰了我一个周末。望高人指点啊。rn rn System.out.println("----------1-------------");rn try rn HttpConnection conn = (HttpConnection)Connector.open(url,Connector.READ_WRITE,true);rn System.out.println("----------2-------------");rn rn
关于HTTP协议的问题
我现在在做一个自动更新的功能:采用的是SOCKET+HTTP协议做的。现在有一个很郁闷的问题。rn就是当我下载的文件类型不一样的时候,发送请求后,服务响应请求收到的数据包不对,导至无法分析HTTP 头信息。rnrn代码:rn[code=C/C++]CString strSend,strHeader,strRange;rn rn int iStatus = 0,nRet;rn char szReadBuf[1024];rn DWORD dwContentLength,dwStatusCode;rn rn while (TRUE)rn rn if(m_pSocket.m_hSocket != NULL)rn m_pSocket.Close();rn m_pSocket.Create();rn m_pSocket.Connect(m_strServer, m_nPort);rn rn strSend = strVerb + m_strObject + " HTTP/1.1\r\n";rn strSend += "Host: " + m_strServer + "\r\n";rn strSend += "Accept: */*\r\n";rn strSend += "Pragma: no-cache\r\n"; rn strSend += "Cache-Control: no-cache\r\n";rn if( !m_strReferer.IsEmpty() )rn strSend += "Referer: " + m_strReferer + "\r\n";rn strSend += "Connection: close\r\n";rn strRange = "Range: bytes=100-\r\n";rn strSend += strRange;rn //必须要加一个空行,否则Http服务器将不会应答rn strSend += "\r\n";rn rn int ret = m_pSocket.Send(strSend.GetBuffer(0), strSend.GetLength());rn strSend.ReleaseBuffer();rn rn strHeader.Empty();rn while( TRUE )rn rn ZeroMemory(szReadBuf,1024);rn ret = m_pSocket.Receive(szReadBuf, 1023);rn rn if( szReadBuf[0] == '\0' ) // We have encountered "\r\n\r\n"rn break; rn strHeader += szReadBuf;rn if( iStatus == 0)rn strHeader += "\r\n";rn rn rn nRet = GetInfo(strHeader,dwContentLength,rn dwStatusCode,m_TimeLastModified);[/code]rnrn当下载文件为*.zip类型的时候。收到的头部信息为:rn[code=C/C++]HTTP/1.1 206 Partial ContentrnDate: Thu, 12 Aug 2010 07:02:18 GMTrnServer: Apache/2.2.9 (APMServ) PHP/5.2.6rnLast-Modified: Mon, 09 Aug 2010 03:12:36 GMTrnETag: "2000000001398-21b11f-48d5b63687063"rnAccept-Ranges: bytesrnContent-Length: 2207931rnContent-Range: bytes 100-2208030/2208031rnConnection: closernContent-Type: application/ziprnrn鄴?暸*"原E-?闞脍牯缥鐂_恩汪e 玟虣稆??O朒悙肦榀?鄸??5賥濵n埛e
关于HTTP 和 HTTPX 的问题
问一下各位大侠rn 我用http://..... 访问一个程序的时候,这个程序能正常解析,并实现下载CSV文件的功能.rn 为什么,用https://..... 访问同一个程序的时候,好象不能正常解析该程序,因为没有实现下载CSV文件,rn而把原代码的***.PHP文件下载了?
关于http头的问题
我需要在asp.net里面,把一个变量保存到http头里面,并在另外一个页面获取这个http头里面保存的变量的内容,该如何实现.rn
关于HTTP和SOCKET问题
我通过SOCKET发送GET命令到某网站,然后把接受到数据存成文件rn结果不能GET到文件,要么空白,要么说不存在。程序如下:rnrn s=socket(AF_INET,SOCK_STREAM,0);rn rn addr.sin_family=AF_INET;rn addr.sin_port=htons(80);rn addr.sin_addr.s_addr=inet_addr("218.1.64.33");rnrn iResult=connect(s,(struct sockaddr *)&addr,sizeof(addr));rn if(iResult==SOCKET_ERROR)rn rn WSACleanup();rn return FALSE;rn rnrn strcpy(strSubAddr,"Get /sports/gb/node/2002-06/25/ \r\n");rn strcpy(fname,"node_5.htm");rn iResult=send(s,strSubAddr,strlen(strSubAddr),0);rn dorn rn strset(strBuffer,0);rn iResult=recv(s,strBuffer,sizeof(strBuffer),0);rnrn LogFile(strBuffer);rn rn while(iResult>0);rnrn WSACleanup();
关于http协议的问题
当客户端与web服务器建立了一个http连接之后,rn客户端发送一个GET请求去请求一个大小为1M的文件。rn然后读取了从服务器端返回的请求响应头信息之后,rn客户端立即断开了此次连接。rn请问这种情况下从服务器到客户端的出口流量是不是rn完整文件的大小?rnrn也就是说如果我的http连接在没有完全读取整个文件的rn情况下就断开连接的话,服务器端是否已经把整个文件rn都发出来了?
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview