浏览器缓存问题

问题描述

        这几天有个需求涉及到文件压缩包的修改和下载,因为是测试环境,我在服务器内直接对压缩包进行反复修改(名字没变),但是在chrome进行下载时发现拿到的压缩包都是最原始的那个,排查发现是chrome浏览器缓存导致

解决方法

       1.设置HTTP请求头

                a.Cache-Control: 这个字段可以设置资源的缓存行为。例如,Cache-Control: no-store指示浏览器和中间缓存(如CDN)不应存储任何版本的响应,每次都需要向服务器请求。

                b.Expires: 通过设置资源的过期时间为过去的某个时间点,可以使缓存失效。例如,Expires: Thu, 01 Jan 1970 00:00:00 GMT。

        2.设置服务器配置

                a.在服务器端(如Apache、Nginx等),可以直接修改配置文件,为特定的文件类型或路径设置缓存相关的HTTP头,这样可以批量地控制缓存策略。

        3.直接使用无痕模式,大部分时候我们遇到这种问题都不能通过上面的方式来解

浏览器缓存的大概原理

        浏览器缓存的原理基于HTTP协议定义的缓存机制,旨在减少网络带宽的使用、降低服务器负载、加快客户端加载网页的速度。缓存机制可以让浏览器存储请求过的资源(如HTML页面、图片、JavaScript文件、样式表等),当用户再次访问这些资源时,浏览器可以直接从本地缓存中读取,而不必每次都向服务器发送请求。以下是浏览器缓存工作原理的一些关键点:

        1. 强缓存(HTTP Cache-Control 和 Expires)

                a.Cache-Control: 这是HTTP/1.1引入的标准,通过此响应头指示浏览器如何进行缓存。常见的指令包括max-age(资源可以被缓存多久)、no-cache(每次都需要服务器验证缓存的有效性)、no-store(完全禁止缓存)等。

                b.Expires: 这是HTTP/1.0的产物,指定资源的到期时间。如果设置的时间还没到,浏览器就直接使用缓存的资源,不会向服务器发起请求。但Cache-Control的优先级高于Expires。

        2. 协商缓存(HTTP Last-Modified / If-Modified-Since 和 ETag / If-None-Match)

                当强缓存失效后,浏览器会与服务器进行“协商”,查看资源是否更新。

                a.Last-Modified / If-Modified-Since: 服务器响应请求时,通过Last-Modified标头告知资源的最后修改时间。浏览器在后续请求同一资源时,会带上If-Modified-Since头,包含相同的时间戳。如果服务器发现资源未修改,返回304状态码,浏览器则使用缓存。

                b.ETag / If-None-Match: ETag是资源的唯一标识符。与Last-Modified类似,但更精确。服务器通过ETag响应头返回资源的标识。浏览器随后请求时,带上If-None-Match头,包含ETag值。如果服务器发现ETag匹配,意味着资源未更改,返回304状态码,浏览器继续使用缓存的资源。

        3. 缓存位置

               a.Memory Cache(内存缓存): 快速读取,但关闭浏览器后清空。

               b.Disk Cache(磁盘缓存): 读取速度慢于内存缓存,但即使关闭浏览器数据也会被保留。

               c.Push Cache(推送缓存): HTTP/2的服务器推送资源使用,生命周期短暂。

               d.Service Worker Cache: 通过Service Worker API控制的缓存,可以自定义缓存策略,适用于复杂的离线应用场景。

        4. 缓存过程

                a.用户发起资源请求。

                b.浏览器检查强缓存,如果有效,直接使用缓存资源。

                c.若强缓存失效,浏览器发送请求到服务器,携带If-Modified-Since或If-None-Match头。

                d.服务器检查这些头信息,确定资源是否更改。

                e.如果未更改,返回304状态码,浏览器使用缓存。

                f.如果已更改,返回200状态码和新资源,浏览器更新缓存。

        5. 缓存控制

                开发者可以通过设置HTTP头信息来控制资源的缓存策略,以优化性能和用户体验。正确配置缓存非常重要,它可以减少不必要的网络请求,加快网站加载速度,同时减轻服务器的负担。

  • 39
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值