三、Nginx缓存(1)-客户端缓存

什么是缓存?

Web缓存是可以自动保存常见文档副本的HTTP 设备。 当Web请求抵达缓存时, 如果本地有“已缓存的”副本, 就可以从本地设备而不是服务器中提取这个文档。

为什么使用缓存?

缓存减少了冗余的数据传输, 节约了网络费用
缓存缓解了网络瓶颈的问题, 对于带宽的要求
缓存降低了对原始服务器的要求, 降低服务器压力
缓存加速了页面的展示

缓存的分类:

缓存分为服务端侧(比如 Nginx,redis,memcached) 和客户端侧(比如 web browser) 。
服务端缓存又分为 代理服务器缓存 和 反向代理服务器缓存(也叫网关缓存, 比如 Nginx反向代理就可以设置缓存)
客户端侧缓存一般指的是浏览器缓存、 app缓存等等, 目的就是加速各种静态资源的访问, 降低服务器压力。

浏览器缓存

  1. 浏览器的缓存规则
  • 第一次访问某个网站
    response headers
    etag:xxxx
    last-modified:xxx
    request headers
    cache-control:no-cache
  • 第二次访问某个网站
    response headers
    etag:xxxx
    last-modified:xxx
    request headers
    if-modified-since:xxx
    if-none-match:xxx
    HTTP 缓存控制头介绍
    HTTP 中最基本的缓存机制, 涉及到的 HTTP 头字段, 包括 Cache-Control, Last-Modified, If-Modified-Since, Etag, If-None-Match 等
  1. Last-Modified/If-Modified-Since
    Last-Modified : 标示这个响应资源的最后修改时间。 web服务器在响应请求时, 告诉浏览器资源的最后修改时间。
    If-Modified-Since : 当资源过期时(使用Cache-Control标识的max-age) , 发现资源具有 Last-Modified 声明, 则再次向web服务器请求时带上头 If-Modified-Since , 表示请求时间。 web服务器收到请求后发现有头 If-Modified-Since 则与被请求资源的最后修改时间进行比对。 若最后修改时间较新, 说明资源又被改动过, 则响应整片资源内容(写在响应消息包体内) , HTTP 200; 若最后修改时间较旧, 说明资源无新修改, 则响应 HTTP 304 (无需包体, 节省浏览), 告知浏览器继续使用所保存的 cache 。
  • f5刷新:
    此处发送时有一个 If-Modified-Since 请求头, 其值就是上次请求响应的 Last-Modified响应状态码为304
  • Ctrl+f5强制刷新
    Pragma行是为了兼容 HTTP1.0 , 作用与 Cache-Control: no-cache 是一样的
  1. Etag/If-None-Match
    Etag : web服务器响应请求时, 告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器觉得) 。
    If-None-Match : 当资源过期时(使用Cache-Control标识的max-age) , 发现资源具有Etage声明, 则再次向web服务器请求时带上头 If-None-Match (Etag的值) 。 web服务器收到请求后发现有头 If-None-Match 则与被请求资源的相应校验串进行比对, 决定返回200或304。

Last-Modified 标注的最后修改只能精确到秒级, 如果某些文件在1秒钟以内, 被修改多次的话, 它将不能准确标注文件的修改时间。
如果某些文件会被定期生成, 当有时内容并没有任何变化, 但 Last-Modified 却改变了, 导致文件没法使用缓存。
有可能存在服务器没有准确获取文件修改时间, 或者与代理服务器时间不一致等情形 。
Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符, 能够更加准确的控制缓存。
Last-Modified 与 ETag 是可以一起使用的, 服务器会优先验证 ETag , 一致的情况下, 才会继续比对 Last-Modified , 最后才决定是否返回304。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InterestingFigure

迈克 Let's Go

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值