http协议+缓存机制

article/2025/9/11 4:31:34

http协议+缓存机制

文章目录

  • http协议+缓存机制
  • 前言
  • 一、http
    • 1.http1.0/1.1
    • 2.http2.0
    • 3.一个TCP连接可以发送多少个HTTP请求
    • 4.浏览器最多可以向同一个host建立几个TCP连接
    • 5.其他关于http
  • 二、缓存
    • 1.强缓存
    • 2.协商缓存
    • 3.etag解决了last-modified不能解决的问题
    • 4.Nginx如何配置缓存


前言

http协议:基于TCP/IP协议,建立TCP连接,需要经过三次握手。
TCP协议:相对UDP协议来说,它是面向连接,传输是可靠的。
在这里插入图片描述
强缓存:通过expires和cache-control控制。
协商缓存:通过last-modified(if-modified-since)和etag(if-none-matched)控制。
在这里插入图片描述


一、http

1.http1.0/1.1

http1.0和1.1都通过响应头:Connection: keep-alive,来实现长连接,http1.1时,默认长连接。(服务器设置的响应头才有效)
短连接和长连接:
短连接:http每一次请求,都会重新建立tcp连接然后发送请求,完成请求后就会关闭tcp连接。
长连接:http第一次建立tcp连接并发送请求,并不会关闭tcp连接,后续请求可以直接发送请求,不用重新建立tcp连接。(长连接保持时间:服务器控制)
http建立长连接
当需要建立 HTTP 长连接时,HTTP 请求头将包含如下内容:

Connection: Keep-Alive

如果服务端同意建立长连接,HTTP 响应头也将包含如下内容:

Connection: Keep-Alive
Keep-Alive: timeout=5, max=100 (同时可以定义Keep-Alive模式的属性)
timeout:表示TCP连接可以保留5s,max:表示最大能建立100个请求。

当需要关闭连接时,HTTP 头中会包含如下内容:

Connection: Close

2.http2.0

http2.0优化体现在三个方面:

  • HPACK算法: 对header进行压缩
  • 多路复用:一个TCP连接可以同时处理多个请求(不用担心请求的个数)
  • 服务器推送:请求一次请求html时,会同时返回html+css+js+img等

3.一个TCP连接可以发送多少个HTTP请求

长连接默认不会断开TCP连接,因此理论上是可以往同一个host发送无数个HTTP请求。

4.浏览器最多可以向同一个host建立几个TCP连接

这和浏览器有关系,chrome最多允许向同一个host建立 6 个TCP连接。

5.其他关于http

  • 状态码

  • 请求头/响应头/请求体/响应体

  • https

  • 正向代理和反向代理

  • 数据data传输压缩

客户端请求头:
Accept-Encoding: gzip, deflate,br (表示data传输时,采用gzip/deflate/brotli 压缩传输)
服务器响应头:
content-encoding: gzip/deflate/br (如果有表示采用了压缩传输,否则就表面服务器没有开启压缩)

二、缓存

1.强缓存

强缓存通过expires和cache-control字段控制:

cache-control优先级比expires高,expires作为兜底使用

cache-control有一下属性:

max-age:31536000; 表示强缓存时间为31536000秒,换算也就是365天。
max-age:31536000,public:365天内客户端和代理服务器都可以缓存该资源。
max-age:31536000,private:365天内只让客户端可以缓存该资源;代理服务器不缓存。
max-age:31536000,immutable:365天内,就算用户刷新页面仍然使用缓存。
no-cache:不做强缓存,但是协商缓存仍然可以配置。
no-store:强缓存和协商缓存都不做。

在这里插入图片描述

2.协商缓存

协商缓存通过last-modified(if-modified-since)或者etag(if-none-matched)控制。

服务器响应头:
last-modified:Sun, 20 Feb 2022 08:52:52 GMT(时间戳,精确到秒)
etag:W/“7dbe2-/YNbrYQfoVaEN68JFm2CHs8koug”(hash字符串)


客户端请求头:
if-modified-since: Sun, 20 Feb 2022 08:52:52 GMT
if-none-matched:W/“7dbe2-/YNbrYQfoVaEN68JFm2CHs8koug”

缓存原理:第一次客户端发送请求,服务器返回last-modified(表示数据最后一次更新的时间)或者etage(单一个文件发生变化,这个文件的hash值就会变化),客户端将数据存入缓存。第二次请求时,将第一次请求时服务器返回的last-modified或者etae的值,对应if-modified-since和if-none-matched放入请求头,向服务器发生请求。服务器拿到这2个值,进行对比如果数据没有发生变化,那就只响应状态码304,客户端从本地拿资源。也就是:

客户端第一次发送请求 --> 客户端响应缓存值 --> 客户端保留缓存值 --> 客户端第二次请求(带缓存值) --> 服务器比对是否鲜活,如果鲜活返回304 || 如果不鲜活返回200,响应新的缓存值 --> 客户端更新缓存值

在这里插入图片描述

3.etag解决了last-modified不能解决的问题

  • 一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新请求。
  • 某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),if-modified-since能检查到的粒度是秒级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒)。
  • 某些服务器不能精确的得到文件的最后修改时间。

注意:协商缓存受强缓存的影响,只有当强缓存过期了且Cache-Control不为no-store时是否缓存才由协商缓存决定。

4.Nginx如何配置缓存

配置协商缓存

location / public {add_header Cache-Control no-cache;etag on;if_modified_since exact;
}

配置强缓存

location / public {add_header   Cache-Control max-age=315360000;
}

http://chatgpt.dhexx.cn/article/IcJUOfal.shtml

相关文章

彻底弄懂HTTP缓存机制及原理

前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。 但是对于很多前端同学来说,仅仅只是知道浏览器会对…

【网络】http缓存机制

HTTP缓存有多种规则,根据是否需要重新向服务器发起请求来分类,我们将其分为两大类 强制缓存对比缓存 流程 强制缓存流程如下 对比缓存流程如下 强制缓存 我们知道,强制缓存在数据为失效的情况下,可以直接使用缓存数据 在没…

彻底理解浏览器的Http缓存机制

概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种:HTTP请求(Request)报文,报文格式为:请求行 – HTTP头(通用信息头,请求头,实体头) – 请…

彻底理解浏览器的缓存机制(http缓存机制)

一、概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: 同步sau交流学习社区(首发):https://www.mwcxs.top/page/565.html。 1、HTTP请求…

HTTP缓存机制与原理详解

1.1 - 缓存 缓存可以重用已获取的资源能够有效的提升网站与应用的性能。Web 缓存能够减少延迟与网络阻塞,进而减少显示某个资源所用的时间。借助 HTTP 缓存,Web 站点变得更具有响应性。缓存分为两点:强制缓存和协商缓存 1.2 - 强制缓存 概念…

浏览器缓存机制(HTTP缓存机制)

不废话,直接上干货,配图解说 首先浏览器首次请求一个网站,网站除了会返回我们需要资源,同时也会返回一些标识信息,这些标识信息约定了客户端和服务端的一些操作,这里列举重要的: 1.cache-contr…

HTTP的缓存机制

前面的话 缓存机制可以有很多种:比如客户端缓存、服务端缓存、代理服务器缓存等。 而本文主角HTTP的缓存是浏览器缓存。为什么这么说,下面来详细介绍一下。 HTTP缓存分类 HTTP缓存可以分为强缓存 与协商缓存。 强制缓存 当缓存数据库中已经有所请求…

HTTP 缓存机制详解

文章目录 HTTP Cache什么是 HTTP Cache关键字简单流程图代码准备不设置明确禁止缓存private与public缓存过期策略1、三种方式设置服务器告知浏览器缓存过期时间2、两种方式校验资源过期 强制校验缓存性能优化期中总结:HTTP 缓存性能检查清单前端工程化参考附代码 HT…

HTTP缓存机制与CDN

前提:周末看视频了解到一个关键词,http缓存,然后顺带这了解了一下cdn web应用程序的缓存大致分为数据库缓存,服务器端缓存(redis以及CDN 等缓存)、本地缓存。 本地缓存还包含很多内容:http缓存&…

浏览器http缓存机制

1、前言 前端缓存主要是分为HTTP缓存和浏览器缓存。其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置;而浏览器缓存则主要由前端开发在前端js上进行设置。 http缓存是web缓存的核心,是最难懂的那一部分,也是最重要的那一部分。 2、H…

Http缓存机制与原理

一 Http缓存基本概念 1.1 Http报文 在浏览器和服务器进行Http通信时发送的数据即为Http报文,其中分为两部分: header - 报文的首部或头部,其中保存着各类请求的属性字段,关于Http的缓存相关规则信息均保存在header中body - 请求…

前端基础-浏览器缓存/HTTP缓存机制(面试常考)

文章目录 一、HTTP报文1.HTTP请求(Request)报文2.HTTP响应(Response)报文 二、缓存过程分析三、缓存规则1.强制缓存1.1Expires1.2 Cache-Control1.3例子 2. 缓存存储3.协商缓存3.1 Last-Modified / If-Modified-Since3.2 Etag / If-None-Match 四、不同刷新的请求执行过程五、总…

一文理解http缓存机制

HTTP报文 浏览器的缓存机制也就是我们所说的HTTP缓存机制,是根据HTTP报文的缓存标识进行的。先了解下HTTP报文: 请求报文 报文格式:请求行 – 请求头(通用信息头,请求头,实体头) – 请求体(只有POST才有请求体) 响…

http缓存机制

http缓存机制 1. 什么是缓存2. 缓存主要目的3. http缓存概述3.1 强缓存3.2 协商缓存 1. 什么是缓存 缓存(cache)是数据交换的缓冲区,是临时存储数据的仓库,在有大量数据交换的应用程序中,我们会采取一些方式将那些实时…

HTTP缓存机制及原理详解(最全)

前言 缓存技术是无数WEB开发从业人员在工作过程中不可避免的一大问题。在产品开发的时候我们总是想办法避免缓存产生,而在产品发布之时又在想策略管理缓存提升网页的访问速度。了解浏览器的缓存命中原理,是开发WEB应用的基础,本文着眼于此&a…

HTTP缓存机制详解

HTTP缓存机制详解 一. 前言二. 缓存的介绍什么是缓存?为什么要使用缓存?1. 减少冗余的数据传输2. 缓解带宽瓶颈3. 破坏瞬间拥塞4. 降低距离时延 三. 缓存有效性命中和未命中的再验证命中率字节命中率区分响应来自缓存还是服务器 四. 缓存拓扑结构私有缓存…

redis消息订阅与发布

一、消息订阅与发布 消息的订阅和发布是进程间的一种消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息。 二、常用命令示例 先订阅后发布,才能收到消息 执行SUBSCRIBE可以一次性订阅多个 执行PUBLISH命令,发布消息 …

redis发布与订阅

一、什么是发布和订阅 发布订阅是一种应用程序(系统)之间通讯,传递数据的技术手段。特别是在异构(不同语言)系统之间作用非常明显。发布订阅可以是实现应用(系统)之间的解耦合。 发布订阅&…

redis的发布和订阅

1、什么是发布和订阅 redis发布订阅(pub/sub)是一种消息通信模式:发布者(pub)发布消息,订阅者(sub)接收消 息。 redis客户端可以订阅任意数量的频道。 2、redis的发布和订阅 1、客户…

Redis——Redis 的发布和订阅

Redis 的发布和订阅 文章目录 Redis 的发布和订阅1、什么是发布和订阅2、Redis 的发布和订阅3、发布订阅命令行实现 1、什么是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 Redis 客户端可…