zoukankan      html  css  js  c++  java
  • 浏览器刷新缓存机制

    缓存可以形象得理解为副本。

    静态缓存:是在新内容发布的同时就立刻生成相应内容的静态页面。

    动态缓存:是在新内容发布以后,并不预先生成相应的静态页面,直到对相应内容发出请求时,如果前台缓存服务器找不到相应缓存,就向后台内容管理服务器发出请求,后台系统会生成相应内容的静态页面,用户第一次访问页面时可能会慢一点,但是以后就是直接访问缓存了。(动态缓存和静态缓存相比更有优势)


    一:地址栏按回车又分为两种情况。

    1.请求的URI在浏览器缓存中未过期,此时,使用Firefox的firebug插件在浏览器里显示的HTTP请求消息头如下:

    Host    192.168.3.174:8080
    User-Agent    Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language    zh-cn,zh;q=0.5
    Accept-Encoding    gzip, deflate
    Accept-Charset    GB2312,utf-8;q=0.7,*;q=0.7
    Connection    keep-alive

    HTTP返回状态显示200 OK,但是,后台Nginx服务器的access.log并没有找到该请求的记录,说明请求并没有真正提交到HTTP服务器。而是被浏览器发现缓存中还有 未过期的文件,直接把请求拦截了,firebug里面显示所谓的“请求头消息”、“响应头消息”都是浏览器“伪造”的。这种刷新,使用的网络流量是最小 的,可以说完全没有,时间消耗也是最少的。就像你找到一盒没有过期的牛奶,觉得肯定没有问题,谁都没告诉就喝了。

    2.是请求的URI在浏览器缓存中已过期,此时,firebug显示的HTTP请求消息头如下:

    Host    192.168.3.174:8080
    User-Agent    Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language    zh-cn,zh;q=0.5
    Accept-Encoding    gzip, deflate
    Accept-Charset    GB2312,utf-8;q=0.7,*;q=0.7
    Connection    keep-alive
    If-Modified-Since    Mon, 04 Jul 2011 10:12:40 GMT

    多了一行If-Modified-Since,后台Nginx服务器的access.log也找到了该请求的记录,说明浏览器对这种情况的处理方法是:再 问一下服务器,请求的URI在某个时间之后有没有被修改过,而这个时间是由上次HTTP响应的Last-Modified决定的。服务器鉴定之后,没有修 改的话,返回304 Not Modified,浏览器收到后,从缓存里读出内容;有修改的话,返回200 OK,并返回新的内容。这种情况,就像你找到一盒已经过期的牛奶,于是问别人,还能不能喝,如果别人说可以,你就把它喝了,如果别人说不行,那你得就另外 找一盒新鲜的牛奶。

    二、(浏览器里面的F5:表示获取未过期的页面缓存???。先会判断缓存是否过期)至于F5刷新,其HTTP请求消息头如下:

    Host    192.168.3.174:8080
    User-Agent    Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language    zh-cn,zh;q=0.5
    Accept-Encoding    gzip, deflate
    Accept-Charset    GB2312,utf-8;q=0.7,*;q=0.7
    Connection    keep-alive
    If-Modified-Since    Mon, 04 Jul 2011 10:12:40 GMT
    Cache-Control    max-age=0

    又多了一行Cache-Control: max-age=0,意思是说,我不管浏览器缓存中的文件过期没有,都去服务器询问一下,相当于上次HTTP响应的Expires暂时失效。服务器的响应 处理流程同上。这种情况,就像你找到一盒牛奶,没有看它的有效期,直接就问别人能不能喝。

    三、Ctrl+F5刷新,其HTTP请求消息头如下:

    Host    192.168.3.174:8080
    User-Agent    Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    Accept    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language    zh-cn,zh;q=0.5
    Accept-Encoding    gzip, deflate
    Accept-Charset    GB2312,utf-8;q=0.7,*;q=0.7
    Connection    keep-alive
    Pragma    no-cache
    Cache-Control    no-cache

    If-Modified-Since没有了,Cache-Control换成了no-cache,此外Pragma行是为了兼容HTTP1.0,作用与 Cache-Control: no-cache是一样的。意思是,我不要缓存中的文件了,强制刷新,直接到服务器上重新下载,于是服务器的响应处理与首次请求这个URI一样,返回 200 OK和新的内容。这种刷新,使用的网络流量是最大的,也是最耗时的。这就像你虽然发现了一盒牛奶,但是把它扔掉了,直接去买一盒新的。

    部分转自http://www.cnblogs.com/mofish/archive/2012/06/08/2541604.html

  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/miaoying/p/4861877.html
Copyright © 2011-2022 走看看