HTTP的伸手头标签 If-Modified-Since

图片 1

HTTP的求头标签 If-Modified-Since

 

直以来并未理会了HTTP请求头的IMS(If-Modified-Since)标签。

近年来于分析Squid的access.log日志文件时,发现了一个景象。
就算即使是针对同一个文件进行HTTP请求,第一不好与次不良闹的网络流量数据也是休均等的。

在调查的进程遭到,逐渐了解了HTTP的If-Modified-Since的峰标签的作用。

 

世家还知客户端浏览器是发生缓存的,里面存之前看过的有些网页文件。
譬如说IE,会拿缓存文件存到“C:\Documents and Settings\zh2000g\Local
Settings\Temporary Internet Files”
这样类似之目里。
实在缓存里积存的无单独是网页文件,还有服务器发过来的该公文之最终服务器修改时。

If-Modified-Since是正经的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的结尾修改时同步发至服务器去,服务器会把这个时间和服务器上实在文件之最终修改时间展开较。

假若时光相同,那么回HTTP状态码304(不回来文件内容),客户端接到后,就一直将地面缓存文件显示到浏览器被。

假使时光不平等,就回去HTTP状态码200与初的公文内容,客户端接到后,会废弃弃旧文件,把新文件缓存起来,并出示到浏览器中。

 下面用一个简便的小例子说明一下。

出于演示例子需要截取HTTP
Request和Response的音讯,我以这边以的工具是Fiddler。
感兴趣之情侣可到【http://www.fiddler2.com/Fiddler2/version.asp】去下载。

 

1.先是以服务器创建一个简单的HTML文件,用浏览器访问一下,成功意味着HTML页面。Fiddler就会出下的抓获信息。
  需要专注的凡
 
(1)因为是第一破访问该页面,客户端发请求时,请求头中没有If-Modified-Since标签。
  (2)服务器返回的HTTP状态码是200,并发送页面的全部内容。
 
(3)服务器返回的HTTP头标签中有Last-Modified,告诉客户端页面的末梢修改时。  
图片 2  
2.以浏览器被刷新一下页面,Fiddler就见面时有发生下的破获信息。
  需要留意的是
 
(1)客户端发HTTP请求时,使用If-Modified-Since标签,把上次服务器告诉它的文书最后修改时间赶回到劳动器端了。
 
(2)因为文件没有改观了,所以服务器返回的HTTP状态码是304,没有发送页面的情。
图片 3 

 

3.用文本编辑器稍微改动一下页面文件,保存。再就此浏览器访问一下,Fiddler就见面生出下的捕获信息。
待专注的是
 
(1)客户端发HTTP请求时,使用If-Modified-Since标签,把上次服务器告诉其的公文最后修改时回来到劳动器端了。
 
(2)因为文件于转过,两边时未一致,所以服务器返回的HTTP状态码是200,并发送新页面的全部内容。
 
(3)服务器返回的HTTP头标签中产生Last-Modified,告诉客户端页面的新的末梢修改时。

图片 4 

 

HTTP的If-Modified-Since头标签及客户端缓存相互配合,大大节约了网络流量。
 

 

 

 

 

本期主题是皇上荣耀,有局部针锋相对出深度的解析。一个重中之重之看法是:《王者荣耀》的兴基于熟人社交。

HTTP缓存 – If-Modified-Since与Last-Modified  

2015-04-14 17:34:38|  分类: HTTP |  标签:http  缓存  if-modified-since  last-modified  |举报|字号 订阅

    

图片 5

 

图片 6

 

  下载LOFTER自家之照片书  |

 

 

整体评价3星球。

概述

当浏览器本地缓存的多少已过期或无法判定是否为新型版本,就会朝着服务器发起呼吁进行对,常见的凡Last-ModifiedIf-Modified-Since成使用。

  • 假定起指定的时过后,文档发生了转,就回去文档内容以及初的改时,浏览器用新的多寡覆盖本地缓存。
  • 比方文档没有成形,返回304 Not
    Modified,只回一些需要以浏览器被更新的Header信息。

流动:一些WEB服务器在实现时,只是于If-Modified-Since与文档的改动时间是不是一律,并不曾承认是否在是时空过后修改了。

以下是本期一些情之摘要:

实例

1:也许有人会问:难道不是有万能的谷歌翻译啊?这就算关系“游客免了解之英国”的平有的:直至三年前,牛津市中心之手机信号还不一得老大,在熙熙攘攘的马路上起不生电话是常,更不用说用手机查地图了。两年前升级至4G大网,情况才有点有改进。#245

首次等呼吁和响应

1)浏览器首次于访时,请求的Header中没If-Modified-Since。
2)响应状态码为200,响应的Header中归了Last-Modified并完好地回了文件内容。

图片 7

 

2:极光大数据以6月份宣布的《王者荣耀研究告诉》印证了田丰的推测,《王者荣耀》用户机型价格占比高的是2000暨2999老大中,占比28.7%,用户偏好的APP前三各类是QQ、QQ音乐及通,24夏以下的用户过52%,二、三线及以下城市用户占比达90.5%。#445

当地有缓存,文档在服务器不修改

1)浏览器还走访,请求的Header携带了If-Modified-Since,其值为上次应的Last-Modified的时光。
2)此文件并未改了,服务器返回响应状态码为304,响应的Body为空。

图片 8

 

3:心流也是一个有关游戏之常用理论。张晰说,它起源于欧洲之心理学家、观察艺术家在拓展创作时表现出的全神贯注、不甘于让打搅、抗拒中断的思想状态。#505

地方有缓存,文档在服务器发改

1)在服务器修改文件。
2)浏览器的请求的Header携带If-Modified-Since。
3)由于文件就改以于If-Modified-Since的年月新,因此响应状态码为200,返回文件内容连于应的Header中回到了Last-Modified,其值为文件的风行修改时。

图片 9

 

<正文结束>

 

 

 

 

 

 

 

 

4:并无是每个人犹见面迷于玩乐。在打闹设计师法师K看来,电游在炎黄的流行水平超出美国,很酷原因是咱们的游艺匮乏。#553

Last-Modified、If-Modified-Since 实现缓存和 OutputCache

5:比如西南大学之几各类专家就通过研究表示:媒体被之武力情节跟攻击性的连锁关系比二手烟的致癌性、铅中毒导致的灵气损伤还要胜得多,而娱乐对人之影响力又超越传统媒体类型,因此,游戏受之武力情节会促成消极影响是确定无疑的。#647

公布时:2015-03-24 21:03 点击:638不好 文章作者:admin

先梳理三个概念:

  • OutputCache:页面输出缓存,一般 ASP.NET 应用程序会用到。
  • Last-Modified:Http 响应头(Http Reponse
    Header),由服务器发给客户端,格式为 Last-Modified:Tue, 24 Mar 2015
    06:40:46 GMT
  • If-Modified-Since:Http 请求头(Http Request
    Header),由客户端发给服务器,格式为 If-Modified-Since:Tue, 24 Mar
    2015 06:40:46 GMT

还有少独 HTTP 状态码:

  • 200(成功):正常状态,服务器已成拍卖了要,每次都产生客户端以及劳务端的交互。
  • 304(未修改):自从上次求后,请求的网页未修改过,服务器返回此应时,不会见返回网页内容。如果网页自请求者上次恳请后更为未曾改变了,将服务器配置为回到此应(If-Modified-Since
    HTTP),服务器可以告知客户端网页没有更改,进而节省带宽和支付。

若我们的应用程序没有进展其他的缓存处理,客户端在历次浏览页面的时段,Last-Modified
和 If-Modified-Since 的响应值都为 NULL,并且 HTTP 状态码为
200,这从没什么问题。我们下要开的做事先行下 OutputCache
实现缓存,代码很简单:

public static int index = 0; [OutputCache(Duration = 120)] public ActionResult About() { FileHelper.Write(@"C:\Users\xishuai\Desktop\test.txt", (index+1).ToString()); ViewBag.Message = "Message:" + index++; return View(); }

第一浅呼吁:

  • Status Code:200
  • Last-Modified:Tue, 24 Mar 2015 07:13:46 GMT
  • If-Modified-Since:NULL
  • test.txt:0
  • Message:0

老二破呼吁:

  • Status Code:304
  • Last-Modified:Tue, 24 Mar 2015 07:13:46 GMT
  • If-Modified-Since:Tue, 24 Mar 2015 07:13:46 GMT
  • test.txt:0
  • Message:0

老三赖呼吁:

  • Status Code:304
  • Last-Modified:Tue, 24 Mar 2015 07:13:46 GMT
  • If-Modified-Since:Tue, 24 Mar 2015 07:13:46 GMT
  • test.txt:0
  • Message:0

Message 和 test.txt 里面的价值一直为 0,Message
是为着测试页面缓存来没产生收效,test.txt 是以测试 About Action
有无来实行,这点儿个价的测试结果是我们纪念使的。另外,可以观看,第一不行刷新的时光,Last-Modified
是有值的,而 If-Modified-Since 却无价值,这是坐 Last-Modified
是服务器发给客户端,而 If-Modified-Since 的来必须使使经过
Last-Modified,并且是出于客户端发给服务器,这个当亚软刷新的时就可以看到,在页面输出缓存的
120 秒内,这简单独值会一直未换。

dudu 之前的片首博文:

  • 一个陪 ASP.NET 从 1.0 到 4.0 的 OutputCache
    Bug
  • 注意!ASP.NET MVC 3 的一个 OutputCache
    问题

起的问题不怕是咱们在第三糟糕呼吁的时光,HTTP 状态码为
200,之前的化解办法是 Response.Cache.SetOmitVaryStar(true);,这个自己在举行测试的时段没有遇到,使用的凡
MVC 5.2.2,微软该是修补了。


面是 ASP.NET 中运用 OutputCache
进行缓存的拍卖,我们一般也是这般用底,根据对 Last-Modified 和
If-Modified-Since 的接头,我们能够不能够运用她,来落实 OutputCache
的片效应啊?下面我们来尝试下,简单代码:

public static int index = 0; public ActionResult About() { string dt = Request.Headers["If-Modified-Since"]; DateTime isModifiedSince; if (!string.IsNullOrEmpty(dt)) { if (DateTime.TryParse(dt, out isModifiedSince)) { if (isModifiedSince.AddSeconds(120) < DateTime.Now) { Response.Cache.SetLastModified(DateTime.Now); } } } else { Response.Cache.SetLastModified(DateTime.Now); } FileHelper.Write(@"C:\Users\xishuai\Desktop\test.txt", (index+1).ToString()); ViewBag.Message = "Message:" + index++; return View(); }

先期说生者代码的意,首先取得请求头中 If-Modified-Since
的值,如果无价值的话语,就透过 SetLastModified 设置响应头中 Last-Modified
的价值,如果有值的口舌,进行时间隔判断,如果以 120 秒外,则更新
Last-Modified 的价值,否则不创新,我们来拘禁下测试结果。

先是差呼吁:

  • Status Code:200
  • Last-Modified:Tue, 24 Mar 2015 07:34:58 GMT
  • If-Modified-Since:NULL
  • test.txt:0
  • Message:0

第二次呼吁:

  • Status Code:200
  • Last-Modified:NULL
  • If-Modified-Since:Tue, 24 Mar 2015 07:35:46 GMT
  • test.txt:1
  • Message:1

老三软呼吁:

  • Status Code:200
  • Last-Modified:Tue, 24 Mar 2015 07:36:03 GMT
  • If-Modified-Since:NULL
  • test.txt:2
  • Message:2

即时是啊动静?和 OutputCache 的作用也不同太多了吧,总的来说,HTTP
的状态码一直为 200,test.txt 和 Message
的价一直以发生变化,也就是说“缓存”没有一点成效,而 Last-Modified 和
If-Modified-Since 则再奇怪,一会时有发生价,一会没值。其实十分正规,如果 HTTP
的状态码为 200,当一个求发起的上,首先设置 Last-Modified 的价,而
If-Modified-Since
则是于产个请求才能够见效,因为生效了,所以亚次呼吁的时刻,我们连无装
Last-Modified
的价值,所以率先浅及第二破的恳求结果就是面所示,下面的呼吁虽是再度第一赖同第二赖呼吁。

俺们掌握,Last-Modified 和 If-Modified-Since 的结果以及 HTTP
的状态码有关,下面我们再来改下代码:

public static int index = 0; public ActionResult About() { string dt = Request.Headers["If-Modified-Since"]; DateTime isModifiedSince; if (!string.IsNullOrEmpty(dt)) { if (DateTime.TryParse(dt, out isModifiedSince)) { if (isModifiedSince.AddSeconds(120) < DateTime.Now) { Response.Cache.SetLastModified(DateTime.Now); Response.StatusCode = 200; } else { Response.StatusCode = 304; } } else { Response.StatusCode = 304; } } else { Response.Cache.SetLastModified(DateTime.Now); Response.StatusCode = 200; } FileHelper.Write(@"C:\Users\xishuai\Desktop\test.txt", (index+1).ToString()); ViewBag.Message = "Message:" + index++; return View(); }

卿可以望我们怀念使开的目的吧,就是手动设置 HTTP
状态码,我们来拘禁下测试结果。

率先次等呼吁:

  • Status Code:200
  • Last-Modified:Tue, 24 Mar 2015 07:49:07 GMT
  • If-Modified-Since:NULL
  • test.txt:0
  • Message:0

其次不成呼吁:

  • Status Code:304
  • Last-Modified:NULL
  • If-Modified-Since:Tue, 24 Mar 2015 07:49:07 GMT
  • test.txt:1
  • Message:0

其三次于呼吁:

  • Status Code:304
  • Last-Modified:NULL
  • If-Modified-Since:Tue, 24 Mar 2015 07:49:07 GMT
  • test.txt:2
  • Message:0

说实话,就不同一点和 OutputCache 的效用等同,那差之是呀吗?其实就算是
test.txt 里的价,在利用 OutputCache 的时光,这其中的值是勿转换的,也就是说
About Action 没有叫执行,而我们地方测试显示,About Action 是实行之,对于
Message 来说,浏览器显示的凡缓存后的价值,我们得以汲取这样的定论:当以
OutputCache 的时刻,客户端只是奔服务器发起一个
Request,仅此而已,这个我们在 Application_BeginRequest
事件中监督到,其余的页面显示了是客户端缓存的结果,当然,前提方式缓存方式是客户端。

还有一个幽默的地方是,在以 OutputCache
的时,除了第一不好呼吁他,其他请求结果负,Last-Modified 和
If-Modified-Since
的价值是休变换的,根据地方测试的结果,我们可以得出,If-Modified-Since 是
Last-Modified 设置后的结果,If-Modified-Since 可以直接无移,只要 HTTP
状态码为 304,并且我们无针对性 Last-Modified 进行安装。而在行使
OutputCache 的当儿,除了 If-Modified-Since 的价一直没有换,Last-Modified
的也罢直未曾换,这个有些怪异,应该是拿要与响应头被的价为展开了缓存。

参考资料:

  • 影响Cache的几个HTTP头信息
  • 有关Last-Modified 与
    If-Modified-Since
  • HTTP的恳求头标签
    If-Modified-Since
  • Last-Modified Header in
    MVC

 

 

 

 

 

6:事实上,《王者荣耀》也许就是是手游“碎片化”与“重度”的极致好意味着,MOBA游戏(Multiplayer
Online Battle
Arena,多人数在线战术竞技游艺)的重度沉浸特征跟平均15分钟左右底每局时长让其既是会掀起玩家的兴,又休会见过分占用用户时间。#749

爬虫入帮派及精通-headers的详实讲解(If-modified-since)

图片 10爬虫

5 个月前

本文章属于爬虫入帮派至精通系统教程第九讲

本文讲解的知识点是headers里面的If-modified-since

7:而异的竞争对手们虽然还以为腾讯的社交优势变为这款游戏分别为他者的最为紧要原因之一。某打厂商人士便直对记者表示“社交元素”是《王者荣耀》成功之“最酷襄推力”。#774

直开案例把

本次我们要抓取的内容是苹果采用企业里的持有app 从 iTunes 下载的 App
Store

当自身第一糟糕打开王荣耀:在 App Store
上的内容网页的时刻,再次刷新的时刻,你见面视http状态码返回
304

图片 11那明亮了之http状态码304对准咱们爬虫有啊用吗?

当自己需要每天的爬取苹果采用企业的app的时候,因为苹果app很多,所以每次只要我全方位爬取的话,会花费很多的时,其实我而抓取有创新的情就好了。那么http状态码304就是派上用场了。

8:低端在线娱乐,与其说是因为收益率比逊色纯属打发无聊的日子,不如说在硬件及清除为了手游的福利快捷,在经验感上败给了单机的游戏性。#933

在押代码把

import requests

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}

url = 'https://itunes.apple.com/cn/app/%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80/id989673964'

z = requests.get(url,headers=headers)

图片 12

# 获取上次修改时间
last_modified = z.headers['Last-Modified']

# 修改headers
headers['If-Modified-Since'] = last_modified

方法1

  • z1 = requests.get(url,headers=headers)
    print z1.status_code
    # 304
    # 可以看到已经返回状态码304,表示网页没有更新
    

方法2

  • z2 = requests.head(url,headers=headers)
    if z1.headers['Last-Modified'] == last_modified:
        print u'网页没有更新'
    # 这种方法也可以知道网页是否有更新
    

9:“有钱就是可犯错。”这漫长中国游玩之铁律已然过时。在马丹看来,《王者荣耀》之所以带动了初一替玩家的浪潮,就是坐相对公平的游戏规则。#964

总结

那一旦我要是每天爬取苹果应商店的app,那么我会以首先不良呼吁的早晚吧每个网页的上次修改时间存到数据库(也就是If-Modified-Since)

然后以自家第二涂鸦爬取的时段,我会把上次存到数据库的年月坐headers里面,如果http状态码返回304,则表示网页没有创新,我得以毫不再解析网页,这样见面省掉大量年华…

最后代码在 kimg1234/pachong

 

 

 

 

 

 

 

10:你得禁止孩子戏电子游戏,但眼看并无可比“散养”更能。最好的主意是培育孩子自我管理的惯,每天玩一个时内。与此同时,则要尽量督促他交露天运动。#1411

11:“撤稿就是否定研究成果的客观性。韩春雨的实验结果人家无法再,自己还要用不来新的数目,撤稿是不可或缺的。主动撤稿,只是同栽次上的礼貌。”中国社会科学院哲学研究所研究员段伟文说。#1573

12:虽然小保方晴子事件对日本科学家的声誉造成了英雄影响,让日本理化研究所蒙受了巨大损失,但是日本生化研究所尊重科学、勇于担责、干净利落回应质疑的神态与做法,也获了国际同行之厚。#1733

13:也就是说,国外早在20年前就是将吗啡充分用于缓解癌症晚期患者的呼吸困难,使病人临终前堵的感想会赢得明显缓和。#2307

14:在美国等于比较发达国家,医生超说明书用药是足以接受之……中国立即面的规定相对少,直到中国药学会于2015年4月发布了《中国药学会超说明书用药专家共识》,提出“超说明书用药要产生尽的文献报道、循证医学研讨结果等证据支撑”,并以现实证据分为5单等级,以体现不同之引荐强度。#2367

15:刘端祺看,我国是绝无仅有以鸦片在里自过简单蹩脚乱之国度,对吗啡来坏十分的恐惧心理;另外,历史上著名人士“刮骨疗伤”等就痛之故事影响深远,使得我们愿歌颂“忍痛文化”。直到今天,我国人占全世界的20%,但吗啡的使用量还欠缺环球之5%。#2401

16:这3号科学家以为,暴涨理论建立为一致多级的误会之上。实际上根据当下底研讨,要发出宇宙膨胀,对于初始标准的要求一定严苛,另一方面,暴涨一旦出,又见面导致永久的涨——这同时会来其他的题目。#3307

17:从某种角度说,这是极端形式之“治不患”,因为科学家曾知道病因在哪里,便足以经基因编辑手段提前拿其修正复原。#3386

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website