前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存

这篇具有很好参考价值的文章主要介绍了前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考地址—如下:

掘金1:浏览器缓存
掘金2 :浏览器缓存

跟别人怎么讲,从大的说:缓存的原理是什么? 再说什么是浏览器缓存?
	缓存的原理是什么:减少请求(浏览器向服务器发起的)

浏览器缓存 请求(静态资源 | 动态资源)

一、缓存是什么?
1、如果没有缓存的机制 每次都要重新请求静态资源 1.从网络上的下载时间,肯定大于从硬盘里读的时间 2.浪费流量
2、
二、为什么?
文件地址一样,就一定会缓存
例如: 
首次访问	www.baidu.com?123.js

更换地址	www.baidu.com?234.js

切回地址	www.baidu.com?123.js

浏览器会自动缓存,

浏览器是如何判断是否使用缓存的??第一次请求网页

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存,缓存,edge浏览器,服务器,前端,javascript

第二次请求相同网页:

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存,缓存,edge浏览器,服务器,前端,javascript

三、怎么做?

问题1、 怎么样才能让浏览器知道 我需要更新我的缓存了

关于时间戳计算问题参考地址:

假如我设定一个定时器,每到一定的时间去更新  「 cacheTime  」,就解决了

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存,缓存,edge浏览器,服务器,前端,javascript

问题2,使用定时器,也会遇到问题,规定1小时发送一个请求,但是接口中的数据 5分钟有改动(数据不及时),或者1小时02分钟有改动(发现未变动,获取的还是缓存中的数据),还是会存在问题,这就是

(强缓存) 的弊端, 我不知道什么时间去更新,去调用。

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存,缓存,edge浏览器,服务器,前端,javascript

强缓存:浏览器不会像服务器发送任何请求,直接从本地缓存中读取文件并返回Status Code: 200 OK

前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存,缓存,edge浏览器,服务器,前端,javascript
前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存,缓存,edge浏览器,服务器,前端,javascript

 200 form memory(内存) cache : 不访问服务器,一般已经加载过该资源且缓存在了内存当中,直接从内存中读取缓存。浏览器关闭后,数据将不存在(资源被释放掉了),再次打开相同的页面时,不会出现from memory cache。

200 from disk(硬盘) cache: 不访问服务器,已经在之前的某个时间加载过该资源,直接从硬盘中读取缓存,关闭浏览器后,数据依然存在,此资源不会随着该页面的关闭而释放掉下次打开仍然会是from disk cache。

注意:优先访问memory cache,其次是disk cache,最后是请求网络资源

协商缓存: 需要向服务器发送请求吗?(肯定发送了)

***(优先级低)一、Last-Modified: 浏览器访问服务器,返回Last-Modified:时间(秒),下次请求通过参数(If-Modified-Since)携带过去。

浏览器向服务器发送资源最后的修改时间,单位是s,当1s内有资源修改,如果修改时间是100ms,那么就存在问题。

二、If-Modified-Since:(Last-Modified文件最后修改时间,通过这个参数携带)

当资源过期时(浏览器判断Cache-Control标识的max-age过期),发现响应头具有Last-Modified声明,则再次向服务器请求时带上头if-modified-since,表示请求时间。服务器收到请求后发现有if-modified-since则与被请求资源的最后修改时间进行对比(Last-Modified),若最后修改时间较新(大),说明资源又被改过,则返回最新资源,HTTP 200 OK;若最后修改时间较旧(小),说明资源无新修改,响应HTTP 304 走缓存。

*****(优先级高)三、Etag:浏览器访问服务器,返回Etag:hash值,下次请求通过参数(If-None-Match)携带过去。

Etag是属于HTTP 1.1属性,它是由服务器(Apache或者其他工具)生成返回给前端,用来帮助服务器控制Web端的缓存验证。

Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。

四、If-None-Match:

当资源过期时,浏览器发现响应头里有Etag,则再次像服务器请求时带上请求头if-none-match(值是Etag的值)。服务器收到请求进行比对,决定返回200或304

结论:

  • Last-Modifed/If-Modified-Since的时间精度是秒,而Etag可以更精确。
  • Etag优先级是高于Last-Modifed的,所以服务器会优先验证Etag。
  • Last-Modifed/If-Modified-Since是http1.0的头字段。

问题一?既然有了Last-Modified,为什么还要诞生Etag呢??

《凤凰架构》谈缓存的时候有提及到:
“Etag 是 HTTP 中一致性最强的缓存机制,譬如,Last-Modified 标注的最后修改只能精确到秒级,如果某些文件在 1 秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间;又或者如果某些文件会被定期生成,可能内容并没有任何变化,但 Last-Modified 却改变了,导致文件无法有效使用缓存,这些情况 Last-Modified 都有可能产生资源一致性问题,只能使用 Etag 解决。

Etag 却又是 HTTP 中性能最差的缓存机制,体现在每次请求时,服务端都必须对资源进行哈希计算(如果修改的文件特别大),这比起简单获取一下修改时间,开销要大了很多。Etag 和 Last-Modified 是允许一起使用的,服务器会优先验证 Etag,在 Etag 一致的情况下,再去对比 Last-Modified,这是为了防止有一些 HTTP 服务器未将文件修改日期纳入哈希范围内。”文章来源地址https://www.toymoban.com/news/detail-664475.html

到了这里,关于前端---需要了解浏览器相关知识--浏览器请求服务器资源---缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring基础(Web-MVC)——在idea中新建springWeb项目 & 浏览器请求 和 服务器响应 & SpringMvc文件相关

    mvc是啥,springMvc是啥,如何搭建springWeb项目, 在springMvc下的request和response怎么发请求,怎么进行响应? springMvc处理文件相关:上传文件,uuid改名,静态资源映射,yaml配置路径,spring配置文件初步; 表现(视图)层:WEB层,用来和客户端进行数据交互的。 servlet-controller 业务层

    2024年02月03日
    浏览(24)
  • 浏览器不需要安装插件,前端播放在线视频方案,几款播放器介绍,hls协议下的h.265视频播放方案推荐

    一般我们播放本地视频都是使用 video标签,但是 video 元素只支持三种视频格式:MP4、WebM、Ogg ,对于在线视频直接使用video是没法播放的,这里介绍几款这两天我在做播放在线监控视频功能时使用过的几款播放器,初次接触流媒体踩了一堆坑,到目前为止对这部分内容都还了

    2024年02月08日
    浏览(31)
  • JS-27 前端数据请求方式;HTTP协议的解析;JavaScript XHR、Fetch的数据请求与响应函数;前端文件上传XHR、Fetch;安装浏览器插件FeHelper

    早期的网页都是通过后端渲染来完成的,即服务器端渲染(SSR,server side render): 客户端发出请求 - 服务端接收请求并返回相应HTML文档 - 页面刷新,客户端加载新的HTML文档; 服务器端渲染的缺点: 当用户点击页面中的某个按钮向服务器发送请求时,页面本质上只是一些数

    2024年02月16日
    浏览(38)
  • 使用Selenium需要浏览器驱动与浏览器版本统一

    安装浏览器驱动 针对不同的浏览器,需要安装不同的驱动。 这里以安装 Chrome 驱动作为演示。 确定浏览器版本 进入设置界面,然后选择 【关于 Chrome】 查看自己的版本信息。这里我的版本是114,下载对应版本的 Chrome 驱动即可。 下载驱动 打开Chrome驱动。单击对应的版本。(

    2024年02月08日
    浏览(26)
  • 浏览器---浏览器/http相关面试题

    共同点:二者都是以key-value的键值对方式存储在浏览器端,大小大概在5M。 区别: (1)数据有效期不同:sessionStorage仅在当前浏览器窗口关闭之前有效;localStorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据; (2)作用域不同:sessionStorage数据只能在同一个

    2024年02月22日
    浏览(31)
  • 真的只是简单了解下浏览器缓存

    当我们打开一个页面时,会向服务端发起很多次请求,如下图打开百毒首页,发起了HTML、各种图片、JS、CSS等资源共72次请求。这里面很多资源并不会频繁变化,每次打开页面都重新请求下载,就很浪费了。 浏览器缓存也称为HTTP缓存,HTTP缓存 简单理解就是本地(浏览器)缓

    2023年04月25日
    浏览(17)
  • 浏览器请求导入postman

    简单三步 1. 复制请求 2.导入 3. send 1. 选择 复制- 复制为cURL(bash)  2. 打开postman 选择import - raw text - continue  然后点击  import 点击send        

    2024年02月13日
    浏览(26)
  • 浏览器请求加Headers

    Chrome 应用商店安装 Modify Header Value 选项里添加 URL、Header Name、Header Value 添加 URL: http://127.0.0.1/ Header Name: Token Header Value: 123 访问 http://127.0.0.1:5000/ HTTP Headers - HTTP | MDN

    2024年02月07日
    浏览(20)
  • 一文快速了解浏览器Sui Explorer

    Sui作为一条基于第一原理重新设计和构建而成的L1公链,所有区块和交易信息皆公开透明,每个人都能自行查看。通过Sui链上浏览器,用户可以迅速了解链上的交易情况,比如当前的TPS和Gas价格,也可以使用Digest来查看特定交易的内容。您可以使用Sui Explorer实现以下目的: 查

    2024年02月06日
    浏览(23)
  • 使用Postman拦截浏览器请求

    项目上线之后,难免会有BUG。在出现问题的时候,我们可能需要获取前端页面发送请求的数据,然后在测试环境发送相同的数据将问题复现。手动构建数据是挺麻烦的一件事,所以我们可以借助Postman在浏览器上的插件帮助拦截请求,获取发送的数据。 既然是基于Postman进行操

    2024年02月15日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包