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协议+缓存机制相关推荐

  1. HTTP协议缓存机制

    目录 一.HTTP缓存机制 二.HTTP缓存的类型 1.强缓存(本地缓存)--不与服务器通信 Expire--使用客户端绝对时间 Cache-Control--使用客户端与服务器相对时间 2.协商缓存 ...

  2. HTTP 协议 -- 浏览器缓存机制

    浏览器缓存机制 浏览器缓存机制主要是 HTTP 协议定义的缓存机制. HTTP 协议中有关缓存的缓存信息头的关键字有 Cache-Control,Pragma,Expires,Last-Modifie ...

  3. 互联网协议 — DNS 缓存机制

    目录 文章目录 目录 DNS 缓存机制 基于缓存的 DNS 域名解析流程 DNS 缓存使用面临的问题 互联网环境缓存应用面临的问题 企业内网缓存应用面临的问题 DNS 缓存在实际应用中的考虑 主动操作 ...

  4. 802.11协议精读9:初探节能模式(PS mode)与缓存机制

    https://zhuanlan.zhihu.com/p/21505178 序言 由于802.11的协议工作机制,如果其一直处于工作状态下,那么能耗还是比较大的,尤其移动设备的电量有限,所以在802. ...

  5. Spring mvc HTTP协议之缓存机制

    概述 Spring MVC 支持HTTP协议的 Last-Modified 缓存机制. 1. 在客户端地一次输入URL时,服务器端会返回内容和状态码200, 表示请求成功,同时会添加一个"L ...

  6. 缓存服务器协议有哪些,HTTP 协议的缓存机制概述

    HTTP 协议的缓存机制涉及到多个请求头字段,而且整个缓存机制的细节行为也存在各种情况的差异,譬如说什么时候访问本地缓存不发送请求,什么时候发送请求查看资源是否更新,获取 response 什么情况下 ...

  7. 网络协议(12) 彻底弄懂HTTP缓存机制及原理

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

  8. 清除浏览器缓存之后为什么还是显示旧的html页面_H5缓存机制浅析-移动端Web加载性能优化...

    1 H5缓存机制介绍 H5,即HTML5,是新一代的HTML标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5引入的离线存储,这意味着 web 应用可进行缓存,并可在没 ...

  9. max点缓存烘焙帧_深入理解浏览器的缓存机制

    一.前言 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷. 对于一个数据请求来说,可 ...

最新文章

  1. 【UVA】10152 ShellSort (几只乌龟的故事)
  2. mysql x64界面配置版下载_MySQL下载安装、配置与使用(win7x64)
  3. bose蓝牙音箱使用说明_身轻如燕好带走 时尚便携蓝牙音箱TOP5推荐
  4. leetcode-最大子序和(动态规划讲解)
  5. RMI non-JRMP server at remote endpoint
  6. printf函数输出超出int时怎么办
  7. Conv2d中的groups参数(分组卷积)怎么理解? 【分组卷积可以减少参数量、且不容易过拟合(类似正则化)】
  8. mysql ext_RHEL5+postfix+mysql+extmai(源代码)(一)
  9. VC++多线程工作笔记0004---线程相关操作
  10. 2021系统架构设计师论文真题
  11. c语言中整形的最大最小值,C语言编写程序输出10个整数中最小值或最大值
  12. JAVA小乌龟游泳_描写乌龟游泳的作文
  13. 淘宝京东苏宁易购:网商时代的角逐
  14. vscode 修改注释颜色
  15. 学习java数组的练习代码
  16. 深入理解ceph-disk的工作机制
  17. 微信小程序的复制功能怎么实现的?
  18. 安卓最牛教材!2021大厂Android面试经历,吐血整理
  19. 微信公众号开发---机器人
  20. 笔记本电脑突然断网,intel wireless AC 9462驱动无法启动

热门文章

  1. python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码)
  2. 8个vue前端UI框架框架值得你掌握
  3. .NET(C#)中不同级别的安全透明代码对类型的影响
  4. 软件质量管理的西药与中药
  5. 4步上手用户运营:如何让用户心甘情愿付费
  6. 快速批量替换文档中的回车符与换行符,包括分节符、分页符的替换
  7. 对多重采样(MSAA)原理的一些疑问
  8. 操作系统- IO多路复用
  9. 数据库原理与应用-------简单查询(2)
  10. Tomcat 端口配置文件端口说明