【转】HTTP学习---Web 缓存

【原文】https://www.toutiao.com/i6592743068623962632/

1. 前端缓存概述

前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而浏览器缓存则主要由前端开发在前端js上进行设置。下面会分别具体描述。

2. 前端缓存分类

2.1 HTTP缓存

整体流程

HTTP缓存都是从第二次请求开始的。

第一次请求资源时,服务器返回资源,并在respone header头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,击中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否击中协商缓存,击中则返回304,否则服务器会返回新的资源。

HTTP缓存分为强缓存和协议缓存,它们的区别如下:

200 from disk or 200 from memory

强缓存的200也有两种情况:200 from disk和200 from memory。现在我没有找到明确的文档来描述这种区别的发生条件。知乎这个问题中提到了一些情景,可以自行取用。

2.1.1 强缓存

2.1.2 协商缓存

协商缓存都是成对出现的。

2.1.3 最佳优化策略——消灭304

最佳优化策略:因为协商缓存本身也有http请求的损耗,所以最佳优化策略是要尽可能的将静态文件存储为较长的时间,多利用强缓存而不是协商缓存,即消灭304。

但是给文件设置一个很长的Cacha-Control也会带来其他的问题,最主要的问题是静态内容更新时,用户不能及时获得更新的内容。这时候就要使用hash的方法对文件进行命名,通过每次更新不同的静态文件名来消除强缓存的影响。

Hash命名:

  • http://xxx.com/main.5eas34fa.js
  • http://xxx.com/main.js?5eas34fa
  • http://xxx.com/5eas34fa/main.js

2.2 浏览器缓存

2.2.1 本地存储小容量

Cookie主要用于用户信息的存储,Cookie的内容可以自动在请求的时候被传递给服务器。

LocalStorage的数据将一直保存在浏览器内,直到用户清除浏览器缓存数据为止。

SessionStorage的其他属性同LocalStorage,只不过它的生命周期同标签页的生命周期,当标签页被关闭时,SessionStorage也会被清除。

2.2.2 本地存储大容量

WebSql和IndexDB主要用在前端有大容量存储需求的页面上,例如,在线编辑浏览器或者网页邮箱。

2.2.3 应用缓存与PWA

应用缓存全称为Offline Web Application,它的缓存内容被存在浏览器的Application Cache中。它也是一个被W3C标准废弃的功能,主要是通过manifest文件来标注要被缓存的静态文件清单。但是在缓存静态文件的同时,也会默认缓存html文件。这导致页面的更新只能通过manifest文件中的版本号来决定。而且,即使我们更新了version,用户的第一次访问还是会访问到老的页面,只有下一次再访问才能访问到新的页面。所以,应用缓存只适合那种常年不变化的静态网站。如此的不方便,也是被废弃的重要原因。

PWA全称是渐进式网络应用,主要目标是实现web网站的APP式功能和展示。尽管PWA也有manifest文件,但是与应用缓存却完全不同。不同于manifest简单的将文件通过是否缓存进行分类,PWA用manifest构建了自己的APP骨架。另外,PWA用Service Worker来控制缓存的使用。这一块的内容较多,在这里就不详细展开了。

2.2.4 往返缓存

往返缓存又称为BFCache,是浏览器在前进后退按钮上为了提升历史页面的渲染速度的一种策略。BFCache会缓存所有的DOM结构,但是问题在于,一些页面开始时进行的上报或者请求可能会被影响。这个问题现在主要会出现在微信h5的开发中

原文地址:https://www.cnblogs.com/ftl1012/p/9571838.html

时间: 2024-08-02 07:11:00

【转】HTTP学习---Web 缓存的相关文章

你有自己的Web缓存知识体系吗?

赵舜东 江湖人称赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作.曾带团队负责国内某电商的运维工作,<saltstack入门与实践>作者,某学院高级讲师. 一.引言 学技术一定要成体系,这是我个人的学习目标,也就是在一个特定的范围内,把与此相关的技术都尽量的搞清楚.搞明白. 我把与Web缓存相关的内容从我编写的<Web运维知识体系>(链接1)中拿了出来,进行完善后,形成了一个单独的<Web缓存知识体系>(链接2),分享给大家,仅

高性能web缓存加速器---varnish

web缓存是对网页文档的临时缓存的信息技术,web缓存能有效降低带宽使用量和服务器负载,提高用户体验.为什么需要缓存呢? 经验研究发现程序的运行具有两个方面的局部性特征: 时间局部性:数据再次被访问到的几率很大 空间局部性:周围数据也可能被访问到的几率很大 根据局部性特征,将访问过的资源IO或加载到高速存储上,不再从源位置加载:另外把其周边的数据也加载到高速存储中,加速资源的访问.缓存就是使用了高速的设备和良好结构设计加速资源访问速度. 一.web缓存 web缓存加速器常常应用的于调度器之后,实

零基础想学习web前端?这套教程是你正在苦苦寻找的吧

你也许会觉得Web前端开发是一个很简单的工作,但当你深入其中时,一定会发现好像Web前端开发不是那么简单,光网站性能优化.响应式.框架就让你焦头烂额.确实,做前端开发就是先易后难,想成为一个优秀的Web前端开发,没有那么简单.不过,天下事难则不会,会则不难,你只需要掌握11项技能就可以成为Web前端“大拿”一.入门必备的技能:第1项技能:HTML超文本标记语言:技能要点:HTML文件的结构HTML文件的编写方法HTML基本标记文字与段落标记框架使用表单XHTML页面结构第2项技能:JavaScr

Web缓存杂谈--Etag &amp; If-None-Match

一.概述 缓存通俗点,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛).Web缓存,也是同样的道理,说白了,就是当你第一次访问网址时,将这个东东(representations),如html页面.图片.JavaScript文件等,存在一个离你较近的地方,当你下次还需要它时,不用再一次跋山涉水到服务器(origin servers)去获取.继而,web缓存的优势也就很明显

Web 缓存欺骗攻击技术详解

你是否曾想过你只需要访问如:https://www.paypal.com/myaccount/home/stylesheet.css或https://www.paypal.com/myaccount/settings/notifications/logo.png这样的链接就可能会泄露你的敏感数据,甚至允许攻击者控制你的帐户? Web缓存欺骗是一种新的Web攻击向量,这种攻击技术的出现使得多种Web缓存技术和框架面临风险. Web缓存和服务器反应的一点介绍 很多网站通常都倾向于使用web缓存功能(

web缓存

web缓存HTTP协议的一个核心特性,它能最小化网络流量,并且提升用户所感知的整个系统响应速度. 什么能被缓存? *Logo和商标图像 *普通的不变化的图像(例如,导航图标) *CSS样式表 *普通的Javascript文件 *可下载的内容 *媒体文件 这些文件更倾向于不经常改变,所以长时间的对他们进行缓存能获得好处. 但一些内容从不应该被缓存: *与敏感信息相关的资源(银行数据等) *用户相关且经常更改的数据

Web缓存基础:术语、HTTP报头和缓存策略

简介 对于您的站点的访问者来说,智能化的内容缓存是提高用户体验最有效的方式之一.缓存,或者对之前的请求的临时存储,是HTTP协议实现中最核心的内容分发策略之一.分发路径中的组件均可以缓存内容来加速后续的请求,这受控于对该内容所声明的缓存策略. 在这份指南中,我们将讨论一些Web内容缓存的基本概念.这主要包括如何选择缓存策略以保证互联网范围内的缓存能够正确的处理您的内容.我们将谈一谈缓存带来的好处.副作用以及不同的策略能带来的性能和灵活性的最大结合. 什么是缓存(caching)? 缓存(cach

Varnish实现Web缓存

varnish实现Web缓存 一.varnish简介 Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多.在1975年时,储存媒介只有两种:内存与硬盘.但现在计算 机系统的内存除了主存外,还包括了CPU内的L1.L2,甚至有L3快取.硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 V

Nginx的Web缓存服务与新浪网的开源NCACHE模块(1)

Nginx的Web缓存服务与新浪网的开源NCACHE模块 什么是web缓存 Web缓存位于内容源web服务器和客户端之间,当用户访问一个 URL时,web缓存服务器回去后端web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,web缓存服务器直接输出内容给客户端,而不是像源服务器再次发送请求.web缓存降低了内容源web服务器.数据库的负载,减轻了网络延迟,提高了用户的响应速度,增强了用户体验. 最著名的还要数Squid Cache,其主要在Unix一类系统运行.