• 浏览器中F5和CTRL F5的行为区别


    前言

    在印象中,浏览器中的F5和刷新按钮是一样的效果,都是对当前页面进行刷新;Ctrl-F5的行为也是刷新页面,但是会清除浏览器缓存,这在前端调试时候会常用。二者真正的区别是什么呢?在stackoverflow上有人给出了很详细的解释,整理如下。

    说明

    在不同的浏览器中F5和CTRL-F5的行为是不一样的,但是他们的主要行为还是非常相似的,以下结果是在FF,IE,Opera和Chrome中进行过测试得出。

    • F5使用缓存,并且只有在资源内容发生变化的时候才会去更新资源。

    当刷新一个页面的时候,浏览器会尝试使用各种类型的缓存,并且会发送If-Modified-Since头到服务器,如果服务器返回304 Not Modified,那么浏览器会使用本地的缓存;如果服务器返回200 OK和资源内容,那么浏览器会使用返回的资源内容,并把资源内容进行缓存,待下次使用。

    • CTRL-F5 强制更新页面资源的缓存。

    MSIE会发送Cache-Control: no-cache头,Firefox和Chrome除了发送Cache-Control: no-cache头之外,还会发送Pragma: no-cache头。Opera比较另类,不发送任何和缓存相关的头。

    以下表格很直观的表明了F5和CTRL-F5的行为,由于原文中测试的浏览器版本较低,所以进行了更新。

    Updated table, 27 September 2010

    +------------+-----------------------------------------------+
    |  UPDATED   |                Firefox 3.x                    |
    |27 SEP 2010 |  +--------------------------------------------+
    |            |  |             MSIE 8, 7                      |
    | Version 3  |  |  +-----------------------------------------+
    |            |  |  |          Chrome 6.0                     |
    |            |  |  +  +--------------------------------------+
    |            |  |  |  |       Chrome 1.0                     |
    |            |  |  |  |  +-----------------------------------+
    |            |  |  |  |  |    Opera 10, 9                    |
    |            |  |  |  |  |  +--------------------------------+
    |            |  |  |  |  |  |                                |
    +------------+--+--+--|--+-----------------------------------+
    |          F5|IM|I |IM|IM|C |                                |
    |    SHIFT-F5|- |- |CP|IM|- | Legend:                        |
    |     CTRL-F5|CP|C |CP|IM|- | I = "If-Modified-Since"        |
    |      ALT-F5|- |- |- |- |*2| P = "Pragma: No-cache"         |
    |    ALTGR-F5|- |I |- |- |- | C = "Cache-Control: no-cache"  |
    +------------+--+--+--|--+--+ M = "Cache-Control: max-age=0" |
    |      CTRL-R|IM|I |IM|IM|C | - = ignored                    |
    |CTRL-SHIFT-R|CP|- |CP|- |- |                                |
    +------------+--+--+--|--+--+                                |
    |       Click|IM|I |IM|IM|C | With 'click' I refer to a      |
    | Shift-Click|CP|I |CP|IM|C | mouse click on the browsers    |
    |  Ctrl-Click|*1|C |CP|IM|C | refresh-icon.                  |
    |   Alt-Click|IM|I |IM|IM|C |                                |
    | AltGr-Click|IM|I |- |IM|- |                                |
    +------------+--+--+--+--+--+--------------------------------+
    

    Versions tested:

    HTTP协议说明

    HTTP/1.1规范14.9.4中规定:

    • End-to-end reload(即CTRL-F5强制刷新)会发送如下HTTP头: 
      Cache-Control: no-cache 
      Pragma: no-cache

    • Specific end-to-end revalidation(即F5 刷新)会发送如下HTTP头: 
      Cache-Control: max-age=0 
      If-Modified-Since: Fri, 15 Apr 2011 12:08:21 GMT

    参考:

    http://stackoverflow.com/questions/385367/what-requests-do-browsers-f5-and-ctrl-f5-refreshes-generate

  • 相关阅读:
    Numpy入门
    Numpy入门
    Spring源码之IoC原理
    LeetCode之连续子数组的最大和
    剑指Offer之从1到n整数中1出现的次数
    剑指Offer之最小的k个数
    剑指Offer之字符串的排列
    剑指Offer之二叉搜索树与双向链表
    剑指Offer之二叉树中和为某一值的路径
    剑指Offer之二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/jiji262/p/3410518.html
Copyright © 2020-2023  润新知