首页 > 其他分享 >前端浏览器缓存和HTTP缓存

前端浏览器缓存和HTTP缓存

时间:2023-05-30 20:22:47浏览次数:53  
标签:HTTP 缓存 浏览器 cache Modified 代理服务器 服务器 客户端

缓存

缓存优点:减少冗余的数据传输;减轻服务器的压力;加快浏览器加载网页的速度。

分类:强缓存和协商缓存

 

强缓存:服务器不需要发送资源给客户端,客户端直接从缓存中取

  有关头字段:Cache-Control、 Expires,两者同时存在时,前者优先级更高

  Expires:当客户端向服务器发送请求,服务器返回资源的同时也返回响应头Expires,表示资源的过期具体时间;

      是一个GMT格式的时间字符串,是一个绝对时间;

                客户端再次请求这个资源,发送请求的时间在这个时间之前,本地缓存始终都有效,可以直接从缓存中取;

      缺点:当服务器和客户端时间偏差较大时,会导致缓存混乱;当缓存时间过期之后,不论请求的资源有没有变化,服务器都会发送资源

  Cache-Control:既可以出现在请求头,也可以出现在响应头。

  服务器端参数:

参数 作用
max-age 在多少秒内有效,是一个相对时间;当为0的时候就是不使用强缓存
s-maxage 用于表示cahe服务器(cache CDN、缓存代理服务器)的缓存的有效时间,且只对public的缓存有效
no-cache 不使用强缓存;即需要使用协商缓存
no-store 禁止浏览器缓存数据,每次客户端请求该资源都需要向服务器请求,服务器每次都会返回完整的资源
public 可以被所有用户缓存,包括中间代理服务器和终端用户
private 是默认值;只允许终端用户缓存,不允许中间代理服务器缓存

  

 

 

 

 

 

 

  客户端参数:

参数 作用
no-cache 表示告知代理服务器不使用缓存,直接向源服务器请求资源
max-stale 值为数字;表示在缓存过期多少秒之后,仍然使用缓存中的数据;例如:max-stale=5,表示客户端在代理服务器上拿缓存时,即使缓存过期了也不要紧,只要过期时间在5秒之内,就仍然从代理服务器上取
min-fresh 值为数字;表示缓存一定要在过期多少秒之前的时间拿,否则拿不到
only-if-cached 表示客户端只会接受代理服务器的缓存,不会接受源服务器的资源;如果代理服务器的缓存无效,则直接返回504

 

 

协商缓存:可以看作是当强缓存失效时,由服务器决定是否使用缓存

  有关头字段:Etag和If-None-Match一组、Last-Modified和If-Modified-Since;同时存在时以前一组为主。

  服务器返回状态码304,表示从缓存中获取资源。

头字段 请求头or响应头 作用
Last-Modified 响应头 客户端第一次请求服务器时,服务器告诉客户端资源的最近修改时间
If-Modified-Since 请求头 值等于服务器上一次返回的Last-Modified的值。客户端告诉服务器资源的最近修改时间
Etag 响应头 资源标识
If-None-Match 请求头 缓存资源标识。值就是上一次访问服务器时获得的Etag的值

  Last-Modified和If-Modified-Since:

     

 

    优点:当缓存没有过期时,服务器返回状态码304,不会返回资源,大大节省了流量和带宽,减轻了对服务器的压力

    缺点:Last-Modified精确到秒,当在同一秒既修改又请求了资源,客户端获取不到最新的资源;如果只单纯编辑了但是没有更新内容,Last-Modified也会改变,导致缓存失效

  Etag和If-None-Match:

  

    Etag由文件内容的hash值和内容长度组成,只有当内容有更新时Etag的值才会改变;解决了文件修改时间精确到秒和编辑但不修改内容导致缓存失效的问题。

判断资源是否来自缓存

  在Network面板的size列表中,memory cache表示来自内存缓存,disk cache表示来自硬盘缓存

  memory cache和disk cache的区别在于存储位置和读取速度;memory cache读取速度比disk cache快;

  memory cache特点:当前tab页关闭后,数据就不存在了,资源被释放掉;再次打开相同页面时,memory cache变成了disk cache

  disk cache特点:关闭tab页甚至关闭浏览器后,数据都还在,再次打开仍然是来自disk cache

常用的缓存方案

  HTML文档使用协商缓存;JS、CSS、图片等使用强缓存。  

标签:HTTP,缓存,浏览器,cache,Modified,代理服务器,服务器,客户端
From: https://www.cnblogs.com/lxmblog/p/17233963.html

相关文章

  • HTTP响应状态码
    HTTP响应状态码一、状态码大类状态码分类说明1xx响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它2xx成功——表示请求已经被成功接收,处理已完成3xx重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理......
  • https和http的区别?https传输的过程是怎样的
    http和https的区别是否加密:HTTPS是HTTP协议的更加安全的版本,通过使用SSL/TLS进行加密传输的数据;连接方式不同:HTTP(三次握手)和HTTPS(三次握手+数字证书)连接方式不一样;端口不同:HTTP默认的端口是80和HTTPS默认端口是443https的验证过程首先客户端向服务器发起请求......
  • 在浏览器地址栏键入URL,按下回车之后经历的流程
    在浏览器地址栏键入URL,按下回车之后会经历以下流程:1、浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址;2、解析出IP地址后,根据该IP地址和默认端口 80,和服务器建立TCP连接;3、浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求消息作为TCP......
  • 谷歌浏览器在用户与Document无交互时无法播放声音问题 - 记录
    谷歌禁止声音播放处理方式1、设置google浏览器,点击地址前面的图标,选择网站设置,找到声音,设置允许,需要用户配合设置2、使用window.AudioContext,需要自己写代码 接口参考地址:https://developer.mozilla.org/zh-CN/docs/Web/API/AudioContext3、使用组件,如:soundman......
  • 服务之:urlacl解决服务HttpListener监听url需要管理员
    在使用HttpListener监听url时,如果没有以管理员身份运行可能会抛出异常,无法监听,遇到这个问题时,可以先使用管理员权限的程序将Url注册到urlacl列表,解决普通权限无法开启监听问题第一步: Netshhttpshowurlacl。查看有没有需要监听的url 第二步:添加Url到Urlacl:例如添加  "......
  • 如何用ReadWriteLock实现一个通用的缓存中心?
    摘要:在并发场景中,JavaSDK中提供了ReadWriteLock来满足读多写少的场景。本文分享自华为云社区《【高并发】基于ReadWriteLock开了个一款高性能缓存》,作者:冰河。写在前面在实际工作中,有一种非常普遍的并发场景:那就是读多写少的场景。在这种场景下,为了优化程序的性能,我们经常使......
  • python爬虫 requests访问http网站之443报错(ssl验证)
    报错信息:urllib3.exceptions.MaxRetryError:HTTPSConnectionPool(host='ssr4.scrape.center',port=443):Maxretriesexceededwithurl:/page/1(CausedbySSLError(SSLCertVerificationError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfa......
  • 如何用ReadWriteLock实现一个通用的缓存中心?
    摘要:在并发场景中,JavaSDK中提供了ReadWriteLock来满足读多写少的场景。本文分享自华为云社区《【高并发】基于ReadWriteLock开了个一款高性能缓存》,作者:冰河。写在前面在实际工作中,有一种非常普遍的并发场景:那就是读多写少的场景。在这种场景下,为了优化程序的性能,我们经常使用缓......
  • tomcat+https /mysql+ssl /nginx+https
    本文简要介绍CA和证书的基础知识,并演示openssl-1.0.2d的安装,CA证书生成、用户证书申请、使用CA签发用户证书等内容。实验环境操作系统:Windowsopenssl版本:openssl-1.0.2d(官网获取)1基础知识1.1PKI为解决Internet的安全问题,世界各国对其进行了多年的研究,初步形成了一套完整的......
  • java 网络通讯:tcp,upd,http
    java网络通讯:tcp,upd,http1.TCP通信服务端用的代表类:ServerSocket类,注册端口。调用accept()方法阻塞等待接收客户端连接。得到Socket对象。TCP通信的基本原理?客户端怎么发,服务端就应该怎么收。客户端如果没有消息,服务端会进入阻塞等待。Socket一方关闭或者出现异常、对方......