http协议缓存详解

  1. 浏览器端强制缓存,http响应头expires 和 cache-control 是设置缓存的重要参数

    • expires 设置到期时间点,这是http1.0的产物,对于客户端时间和服务器端有时差的情况,会导致缓存失效,或者缓存时间变长。

    • cache-control 设置多久以后过期,http1.1的的优化版本,解决了时差的问题,建议用这个。

    • 目前的浏览器两个参数都是生效的,那个先过期那个生效,建议只使用cache-control

    • 强制缓存有请求记录,但是不会真实的发送请求,响应结果直接是200.

    • 这种固定缓存时间适合那些几乎永远不会变动的资源。如果有一定变动的不适合。

  2. 浏览器端协商缓存,由响应头ETag 和 Last-Modified控制

    • 第一次请求资源的时候服务器响应头返回这两个参数,ETag是资源None值,一般是文件hash,Last-Modified是最后一次修改时间

    • 第二次请求的时候浏览器端默认在If-None-Match 和 If-Modified-Since,带上ETag和Last-Modified,然后由服务端程序比对这两个值是否变动。

    • 服务端比对过程,If-Modified-Since如果和后端最后一次修改时间不相等那就文件一定被改过,如果相等可能是一个时间精度内改了多次,所以要比对资源的none值。如果还一样,服务器端认为客户端是最新资源,返回304和空的响应体,浏览器就会去读取本地缓存。如果比对不上,那么就正常返回服务器资源,状态码200.

    • 协商缓存适用于需要前端缓存,但是有一定变动可能的资源。

  3. 客户端发起请求的时候,可以通过请求头,决定是否要走缓存。

    • no-cache:带了这个请求头的请求不在走强制缓存,但是还可以走协商缓存。

    • no-store:带了这个请求的不走强制缓存和协商缓存,相当于这个请求禁用缓存。

posted on   zhangyukun  阅读(104)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2019-01-16 mysql 不允许分组的问题 this is incompatible with sql_mode=only_full_group_by

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示