http协议之缓存

http协议缓存控制

第一次请求时200 ok

第二次请求304 not modified 为修改状态

解释: 在网络上有一些缓存服务器,另外浏览器自身也有缓存功能。

当我们第一次访问某个图片的时候,正常下载图片返回200 ok

基于一个前提-图片不会经常改动,服务器在返回200的时候,还返回该图片的”签名“ -- etag (签名可以理解为图片的“指纹”)

当浏览器再次访问该图片时,去服务器校验“指纹”

如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担

抓包观察:

第一次请求:

    第一次响应头: 在响应头里面可以看到请求的图片信息

etag:"321397979879-fndlsh32yfsh894392"

last-modified:  Tue, 10 Jun 2018 12:12:12 GMT

第二次请求头:

第二次请求头里面:

if-modified-since:    Tue, 10 Jun 2018 12:12:12 GMT

如果自Tue, 10 Jun 2018 12:12:12 GMT这个时间后图片没有修改则不会重新请求,如果有修改则会重新请求

if-none-match:  "321397979879-fndlsh32yfsh894392"

如果该图片最新的etag值 和 if-none-match 的值不匹配,则重新请求

第二次响应头:

status code 304 not modified

如果是304就以为这浏览器从本地的缓存中取数据,节省了图片在网络上传输的时间

大网站的缓存:

如果网站比较大,有N台缓存服务器,那么这N台缓存服务器如何处理主服务器上的文件?

要不要缓存?

如果缓存该缓存多久呢?

缓存服务器与主服务器之间应该有一些协议,来说明这2个问题

用什么协议来说明这两个问题?

答:   还是http协议,用头信息,cache-control 来控制

利用协议控制缓存(apache服务器):

利用协议控制缓存:相关模块是---mod_expires

ExpiresActive On

ExpiresByType image/jpeg ‘access plus 1 month‘

控制是否缓存以及缓存周期

在.htaccess中,具体语法如下:

ExpiresDefault "<base>  [plus] {<num> <type>}*"

ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"

ExpiresDefault 是设置默认的缓存参数

ExpiresByType 是按照文件类型来设计独特的缓存参数

我们用第二种来做测试给jpg图片设置一个月的生存周期

后面4个参数怎么理解?

Base: 基于哪个时间点来计算缓存有效期

Access/now: 基于请求响应的那一瞬间,比如从此瞬间到一个月之后

Modification: 基于被请求文件的最后修改日期来计算,比如最后修改日期的后一周内仍然有效

num: 缓存时间的大小 (30)

type: 缓存时间的单位 (天)

实例:

如果这是在集群环境里,缓存服务器得到此图片,将会认为一个月内有效,从而减轻了主服务器的负担

利用协议取消缓存(apache服务器):

    如果有些信息不要缓存,必须要去主服务器获取,那么要这样

客户端:

Cache-Control:no-cache

Pragma:no-cache
    

服务器端清除缓存:相关模块是:mod_header 

<FileMatch "\.(jpg|gif|png)$">

Cache-Control:no-cache

Header unset Etag

Header unset Last-Modified

</FilesMatch>

revalidate:使重新生效,使从新有法律效力

多次刷新浏览器请求效果gif会始终都请求, jpeg 的会有缓存

时间: 2024-10-10 14:25:41

http协议之缓存的相关文章

HTTP协议 (四) 缓存

之前写过一个篇 [HTTP协议详解] ,这次继续介绍HTTP协议中的缓存机制.HTTP协议提供了非常强大的缓存机制, 了解这些缓存机制,对提高网站的性能非常有帮助. 本文介绍浏览器和Web服务器之间如何处理"浏览器缓存",以及控制缓存的http header. 本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这工具,可以先参考[Fiddler教程] .在看本文的时候, 请务必打开Fiddler来实践. 阅读目录 缓存的概念 缓存的好处 Fiddle

[转] HTTP协议(缓存机制Cache)

转自: http://www.cnblogs.com/Jessy/p/3568935.html HTTP的缓存 至于响应消息的实体,与请求消息的实体内容相似,这里只借绍下User-Agent头 User-Agent头域的内容包含发出请求的用户信息. Cache-Control头域(请求和应答通用头域) Cache-Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存 处理过程.请求时的缓存指令包括no-cache.n

Mcrouter-基于Memcached协议的缓存层流量管理工具(Memcached集群的另一个选择)(转)

Mcrouter 是一个基于Memcached协议的路由器,它是 Facebook缓存架构的核心组件,在峰值的时候,它能够处理每秒50亿次的请求.近日,Facebook开放了Mcrouter的源代码,且遵从BSD协议,希望能够帮助更多的网站使用Mcrouter并扩大其系统规模.因为任何要接入Memcached服务的客户端都会使用标准ASCII编码的Memcached协议,所以对于客户端来说,Mcrouter就像一个Memcached服务器:而对于服务器端来说,Memcached却又像一个普通的M

转 HTTP协议 (四) 缓存

转自:http://www.cnblogs.com/TankXiao/archive/2012/11/28/2793365.html 缓存的概念 缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服务器端的缓存,有代理服务器的缓存, 有ASP.NET页面缓存,对象缓存. 数据库也有缓存, 等等. http中具有缓存功能的是浏览器缓存,以及缓存代理服务器. http缓存的是指:当Web请求抵达缓存时, 如果本地有“已缓存的”副本,就可以从本地存储设备而不是从原始服务器中提取这个文档. 缓存的好处

http协议的缓存

1.Cache-Control response.setHeader('Cache-Control','public,max-age=360') //服务器在响应时,回传max-age参数,表示缓存时间:xx秒,那么客户端在下次请求时,根据上次回传的max-age值, //首先判断缓存的相对时间,如果还未超过时间,则不发起请求,直接从Cache中读取.反之,则重新请求. 2.Expires response.setHeader('Expires','Mon Jan 01 2018 08:00:0

06 HTTP协议缓存控制

一:HTTP协议缓存控制 第1次请求时 200 ok 第2次请求时 304 Not Modified 未修改状态 解释: 在网络上,有一些缓存服务器,另, 浏览器自身也有缓存功能. 当我们第一次某图片时,正常下载图片,返回值200 基于一个前提--图片不会经常改动, 服务器在返回200的同时,还返回该图片的”签名”-- Etag  ,(签名可以理解图片的”指纹”). 当浏览再次访问该图片时,去服务器校验”指纹”, 如果图片没有变化,直接使用缓存中的图片,这样减轻了服务器负担. 二:抓包观察分析

HTTP协议 (七) Cookie

Cookie是HTTP协议中非常重要的东西, 之前拜读了Fish Li 写的[细说Cookie], 让我学到了很多东西.Fish的这篇文章写得太经典了. 所以我这篇文章就没有太多内容了. 最近我打算写一个系列的HTTP文章,我站在HTTP协议的角度, 说说我对Cookie的理解. 阅读目录 Cookie是什么,有什么用,为什么要用到Cookie Cookie的分类 Cookie存在哪里 使用和禁用Cookie Fiddler查看HTTP中的Cookie 网站自动登陆的原理 截获Cookie,冒充

HTTP协议 (六) 状态码详解

HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.  如果是做AJAX,REST,网络爬虫,机器人等程序.还是需要了解其他状态码.  本文我花了一个多月的时间把所有的状态码都总结了下,内容太多,看的时候麻烦耐心点了. HTTP状态码的学习资料到处都有,但是都是理论上讲解.  本文介绍HTTP协议中的HTTP状态码(HTTP Status Code), 会对大部分的状态码都进行了详细的实例讲

运维-服务器缓存之varnish

varnish 一.介绍下吧: 首先了解几个概念, 1. Varnish不缓存带有Set-Cookie头的http输出. 2. 对于HTTP协议中缓存部分,Varnish遵从http协议部分.如:带有如下头信息,Control-Cache: no-store, no-cache, must-revalidate, post-check=0, pre-check=0,默认varnish不会缓存. 3. HTTP协议中缓存部分,Control-Cache优先于Expires,Pragma: no-c