http请求缓存如何使用
了解HTTP-cache文章
本文大部分内容参考图文并茂的HTTP。那么为什么在谈缓存的时候要先扯代理服务器呢?不要着急,让我们来看一个简单的请求图。
我们看到客户端(用户)不是直接向源服务器发送请求,而是通过代理服务器,然后通过代理服务器发送给源服务器。响应也遵循此顺序。
那么代理服务器在这个过程中起到什么作用呢?
缓存是指保存在代理服务器或客户端本地磁盘上的资源副本。使用缓存可以减少对源服务器的访问,从而节省通信流量和通信时间。
缓存是代理服务器的一种,分为缓存代理型。换句话说,当代理转发从服务器返回的响应时,代理服务器将保留资源的副本。
缓存的好处是可以避免多次从源服务器转发资源。因此,客户端可以从附近的缓存服务器获取资源,源服务器不必多次处理同一请求。
即使缓存服务器和客户端有缓存,也不可能每次都返回给我。如果有,我不知道源服务器有没有更新,因为我总是看缓存的资源。
为了解决这个问题,时效性的概念是为缓存设计的:
即使有缓存,由于客户端的要求和缓存的有效期,资源的有效性也会向源服务器确认。如果判断缓存无效,缓存服务器将再次从源服务器获取“新”资源。
缓存不仅可以存在于缓存服务器中,也可以存在于客户端浏览器中。以InternetExplorer程序为例,客户端缓存称为Internet临时文件。
如果浏览器缓存有效,就没有必要向服务器请求相同的资源,可以直接从本地磁盘读取。
此外,与缓存服务器相同,当确定缓存已经过期时,它会向源服务器确认资源的有效性。如果判断浏览器缓存无效,浏览器会再次请求新的资源。
Pragma是HTTP/11之前历史遗留的字段,只定义为向后兼容HTTP/10。
定义的形式是独特的,如下所示。
Pragma:无缓存
这个头字段属于通用头字段,但是只在客户端发送的请求中使用。客户端将要求所有中间服务器不要返回缓存的资源。
通过指定标题字段Cache-Control的指令,可以操作高速缓存的工作机制。
可用指令按请求和响应分类如下:
公共指导
缓存控制:公共
当公共指令被指定时,它清楚地表明其他用户也可以使用缓存。
私人指导
无存储指令
缓存控制:无存储
当使用no-store指令时,它意味着请求(和相应的响应)或响应包含机密信息。
因此,该指令规定缓存不能在本地存储请求或响应的任何部分。
Ps:从字面上看,很容易把no-cache误解为不缓存,但实际上no-cache代表的是不缓存过期的资源。缓存将在与源服务器确认有效期后处理资源。或许称之为“无撤销不从缓存提供服务”更合适。No-store真的不是缓存,读者要注意区别。
S-maxage指令
cache-control:s-maxage=604800//(单位:秒)
s-maxage指令的功能与max-age指令相同,不同的是s-maxage指令只适用于多个用户使用的公共缓存服务器(这里指代理服务器)。也就是说,这个指令对重复返回响应给同一个用户的服务器没有影响。
此外,当使用s-maxage指令时,Expires头字段和max-age指令的处理被直接忽略。
最大年龄指令
缓存扩展令牌
缓存控制:私有,社区="UCI"
使用高速缓存扩展令牌,可以扩展高速缓存控制头字段中的指令。
例如,高速缓存控制头字段本身没有命令社区。在扩展标记的帮助下,添加了这条指令。如果缓存服务器不能忽略社区的新指令,就直接忽略。因此,扩展令牌仅对能够理解它的缓存服务器有意义。
如果-未修改-自:2012年7月3日星期四00:00:00GMT
头字段If-Modified-Since的功能与头字段If-Modified-Since的功能相反。它的功能是通知服务器,如果在字段值中指定的日期和时间之后,指定的请求资源尚未更新,则它只能处理请求。如果更新发生在指定的日期和时间之后,则作为响应返回状态代码412前提条件失败。
Ps:Last-Modified有些问题。如果在服务器上修改了一个资源,但是它的实际内容根本没有改变,那么整个实体将被返回给客户机,因为最后修改时间不匹配(即使在客户机缓存中有一个相同的资源)。
标题If-None-Match是附加条件之一。且其报头字段If-Match具有相反效果。当用于指定If-None-Match字段的值的实体标记(ETag)的值与所请求资源的ETag不一致时,它告诉服务器处理该请求。
在GET或head方法中使用HEADer字段If-None-Match来获取最新的资源。因此,这有点类似于使用头字段If-Modified-Since时的情况。
不要向服务器查询,直接使用浏览器缓存的内容。响应内容与上一次响应内容完全相同,例如日期时间为上次响应时间。
F5的功能不同于直接在URI输入字段中键入然后按enter。F5无论如何都会让浏览器向服务器发送一个HTTP请求,即使之前的响应中有Expires头。
CtrlF5想要的是彻底从服务器获取一个新的资源,所以不仅需要向服务器发送一个HTTP请求,而且这个请求连if-modified-since/if-none-match都没有,这就迫使服务器不返回304,而是准确返回整个资源的副本。这样CtrlF5导致的传输时间变长,自然网页刷新变慢。
Cache-Control只在HTTP11中可用,不适用于HTTP10,而Expires同时适用于HTTP10和HTTP11,因此,大多数情况下同时发送这两个头是更好的选择。当客户端可以解析两个标头时,将首先使用Cache-Control。
两者都是通过某个标识值请求资源。如果服务器端的资源没有变化,会自动返回HTTP304(未变化)状态码,内容为空,这样就节省了传输的数据量。当资源改变时,新的资源被返回。从而保证资源不会重复发送给客户端,也保证了在服务器发生变化时,客户端能够获得最新的资源。
Last-Modified使用文件的最后一次修改作为文件标识值,无法处理一秒钟内多次修改文件的情况,只要修改文件就会再次返回资源内容,即使文件的实际内容没有修改;ETag作为“被请求变量的实体值”,完全可以解决Last-Modifiedheader的问题,但其计算过程需要消耗服务器资源。
Expires和Cache-Control都存在服务器被修改的问题。如果缓存仍然有效,那么客户端将不会请求服务器资源(非刷新),因此存在资源版本不匹配的问题。但是,强制刷新肯定会发起一个HTTP请求并返回资源内容,而不管该内容在此期间是否被修改过。Last-Modified和Etag每次请求资源都会发起请求,即使长时间不会有修改的资源,至少也会有一次请求响应消耗。
对于所有可缓存的资源,指定Expires或缓存控制最大年龄和Last-Modified或ETag是非常重要的。同时,前者和后者可以很好地相互适应。
前者不需要每次都发送请求来检查资源的时效性,而后者保证了资源没有被修改时不需要重新发送。在用户不同的页面刷新行为中,两者的结合也可以很好的利用HTTP缓存控制特性。无论是在地址栏输入URI然后回车访问,还是点击刷新按钮,浏览器都可以充分利用缓存的内容,避免不必要的请求和数据传输。
方法很简单,就是把可能更新的资源以版本形式发布。常见的方法是将一串md5或时间标记附加到文件名或参数上:
可以看出,上面的例子都有不同的做法。有的在URI后面加md5参数,有的用md5值作为文件名的一部分,有的把资源放在featureversion的目录下。
然后在文件不变的情况下,浏览器可以直接使用缓存的文件,不需要发起请求;当文件改变时,由于文件版本号的改变,文件名改变,请求的url改变,自然文件更新。这可以确保客户端能够及时从服务器接收到新修改的文件。通过这样的处理,增加了静态资源尤其是资源的缓存时间,避免了资源快速过期,客户端频繁向服务器发起资源请求,服务器返回304响应(Last-Modified/Etag)的情况。
网页缓存文件怎么提取?
直接找到对应的缓存文件的目录打开就可以了,如果你系统装在C盘,那么目录应该是C:DocumentsandSettingsAdministratorLONGSKY-L383KG7LocalSettingsTemporaryInternetFiles其他盘的就把C换成你的盘符就可以了,进去之后按文件大小排序一下就行了,一般视频文件都是比较大的,这样就比较好找了,当然,你也可以搜索一下常见的饰品格式的文件效果也不错
怎么要用cookie缓存?
原因有以下几点:
1、信号问题,当在信号弱的情况下,网页是需要很长时间或者根本打不开的。
2、软件问题,新版本的UC或者是浏览器也有可能导致。
3、上网设置问题,你可以改变一下,cmwap,这个比较稳定。
手机浏览器cookie设置的方法操作如下:1、打开iphone的主界面,点击“设置”。
2、设置条目里,找到“Safari”,这就是自带浏览器的相关设置,点击进去。
3、这时候可以看到自带浏览器的相关设置了,往下拉,有“清除历史记录”、“清除Cookie”、以及“清除缓存”,三项,点击“清除历史记录”,询问时确定。
4、点击“清除缓存”。
电脑浏览器,比如qq浏览器如何缓存视频?
QQ浏览器可以缓存视频,缓存方法如下:;1进入QQ浏览器的首页,设置QQ浏览器默认的搜索引擎,点击左键,找到“设置”,找到,搜索引擎,查看已有的搜索引擎。2选择要使用的搜索引擎,选择完成,回到首页,在输入框输入要搜索的内容,此时出现搜索结果。3输入要搜索的视频内容,进入网页,QQ浏览器支持直接打开网页,进入的网页可能是不同的视频网站,但是下载的方法都是一样。4进入视频播放后,轻触界面,出现播放的进度条,在出现的界面上点击下载按钮,进入视频缓存界面,之后点击开始缓存。5缓存后的视频是在“我的视频—缓存管理”中查看,也可以直接左键进入“下载”查看视频下载进度,下载完成后,就可以在下载列表里看到已完成。6不同网页的视频下载的格式不一样具体看缓存的视频是什么格式,如果需要删除你的视频,长按视频,勾选删除,有时你正在播放的视频即使缓存完成也是无法删除的,需要关闭浏览器重新进入删除。
360浏览器怎么下载视频
1、在360浏览器中打开你要看的视频,无需缓冲
2、在下面有一个IE,打开它,红圈圈住的,双击
3、出现一个新网页,该网页是你所要视频的网页,让视频缓冲完
4、然后:工具——internet选项——常规栏的浏览历史纪录的设”——查看文件,按照红圈依次点
5、按着红圈依次点,视频文件是MP4,FLV,FLASH,拖到桌面放一下看是不是你要的就OK
打网页时出现(缓存文件写入失败!)怎么办呢?
右键桌面的IE在弹出的菜单中选Internet属性然后找到Internet临时文件按删除Cookies按钮然后再按删除文件按钮如果还不行就按设置按钮在弹出的窗口里面找一个叫移动文件夹的按钮把文件夹的位置更改一下
怎样在电脑上播放缓存的网页视频?
您好,很高兴为您服务!
HD版的UC浏览器缓存的视·频是不支持导出使用其他播放器播放的,只能使用UC浏览器播放,故找到缓存的文件也是无法更改格式播放的,请了解。
如果仍有问题,请您继续向我们反馈,我们会第一时间为您跟进。
0条评论