【面试八股总结】超文本传输协议HTTP(二)
参考资料 :小林Coding、阿秀、代码随想录
一、HTTP缓存技术
将资源(如网页、图像、脚本等)的副本存储在客户端或中间代理服务器上,以便将来的请求可以直接从缓存中获取,而不必重新从服务器下载资源。这有助于减少网络延迟,提高页面加载速度,并减轻服务器的负担。
HTTP 缓存有两种实现方式,分别是强制缓存和协商缓存。
1. 强制缓存
浏览器判断请求的⽬标资源是否有效命中强缓存,如果命中,则可以直接从内存中读取⽬标资源,⽆需与服务器做任何通讯。
强缓存是利用下面两个 HTTP 响应头部(Response Header)字段实现的,它们都表示资源在客户端缓存的有效期:
- Cache-Control : http1.1 中增加该字段,使⽤ max-age 指令,可以设置资源在缓存中的最⻓有效时间,单位为秒。
- Expires :设置⼀个强缓存时间,此时间范围内,从内存中读取缓存并返回。
Cache-Control 的优先级高于 Expires
2. 协商缓存
与强制缓存不同,协商缓存依赖于客户端和服务器之间的交互,在协商缓存中,服务器在响应中提供了资源的⼀些标识信息,客户端在后续请求中通过这些信息来判断资源是否发⽣了变化,进⽽判断是否需要重新传输资源。
常用于协商缓存的⼀些头部字段:
1)ETag 和 If-None-Match
- ETag 是服务器为资源⽣成的唯⼀标识符,可以是根据⽂件内容计算出的哈希值。
- 客户端在请求头部的 If-None-Match 字段中携带上次响应的 ETag 值。
- 服务器比较请求中的 If-None-Match 值与当前资源的 ETag 值,如果匹配,表示资源未发⽣变化,返回状态码 304 Not Modified 。
2)Last-Modified 和 If-Modified-Since
- Last-Modified 是资源的最后修改时间,服务器在响应头部中返回
- 客户端在请求头部的 If-Modified-Since 字段中携带上次响应的 Last-Modified 时间。
- 服务器比较请求中的 If-Modified-Since 值与当前资源的 Last-Modified 值,如果请求时间早于资源的最后修改时间,表示资源未发生变化,返回状态码 304 Not Modified。
3. 缓存过期机制
max-age 指令出现在请求报⽂,并且缓存资源的缓存时间⼩于该指令指定的时间,表示该缓存未过期。
- max-age 指令出现在响应报⽂,表示缓存资源在缓存服务器中保存的时间。
- Expires ⾸部字段也可以⽤于告知缓存服务器该资源什么时候会过期。
在 HTTP/1.1 中,会优先处理 max-age 指令; 在 HTTP/1.0 中,max-age 指令会被忽略掉。
4. 禁用缓存
HTTP/1.1 通过 Cache-Control ⾸部字段来控制缓存。
- 禁止进行缓存 :no-store 指令规定不能对请求或响应的任何⼀部分进⾏缓存。
- 强制确认缓存 :no-cache 指令规定缓存服务器需要先向源服务器验证缓存资源的有效性,只有当缓存资源有效时才能使⽤该缓存 对客户端的请求进⾏响应
二、HTTP 版本更新
1. HTTP 1.0 和 HTTP 1.1 区别
HTTP 1.1 | HTTP 1.0 | |
---|---|---|
连接 | 支持长连接,每个TCP连接上可传送多个HTTP请求和响应,默认开启connection:Keep-Alive | 默认为短连接,每次请求都需要建立一个TCP连接 |
缓存 | 则引⼊了更多的缓存控制策略例如 Entity tag / If-None-Match 等更多可供选择的缓存头来控制缓存策略 | 主要使⽤ If-Modified-Since/Expires 来做为缓存判断的标准 |
管道化 | 管道化使得请求能够“并⾏”传输,但是响应必须按照请求发出的顺序依次返回,性能在⼀定程度上得到了改善。 | \ |
字段 | 增加Host字段,使得一个服务器能够用来创建多个Web站点。 | \ |
状态码 | 增加24个错误状态响应码 | \ |
带宽 | 在请求头引⼊了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content) | 存在⼀些浪费带宽的现象,例如客户端只是需要某个对象的⼀部分,⽽服务器却将整个对象送 过来了,并且不⽀持断点续传功能 |
2. HTTP 2.0 和 HTTP 1.1 区别
HTTP 2.0 | HTTP 1.1 | |
---|---|---|
传输格式 | 采用二进制,只认0/1组合,实现更加快,健壮性更加完整 | 解析是基于文本,文本表现形式多样,不利于健壮性考虑 |
多路复用 | 连接共享,一个请求对应一个ID,每个连接都可以有多个请求,接收方可以根据请求的ID将请求再次归属到不同的服务端请求中,极大提升效率。 | \ |
Header压缩 | 通过encoder减少Header大小,通讯双方会各自缓存一份Header字段表,既避免重复Header传输,又减小了需要传输的大小。 | Header带有大量信息,而且每次都要重复发送 |
服务端推送 | 把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。因为没有发起请求,建⽴连接等操作,所以静态资源通过服务器推送,可以极⼤的提升速度。 | \ |
三、一次完整的HTTP请求/响应过程
1. 客户端连接到Web服务器
- HTTP客户端(通常是浏览器),与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2. 发送HTTP请求
- 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文。
3. 服务器接受请求并返回HTTP响应
- Web服务器解析请求,定位请求资源。服务器将资源副本写到TCP套接字,由客户端读取。
4. 释放TCP连接
- 若connection模式为close,服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;
- 若connection模式为keepalive。则该连接会保持一段时间,在该时间内可以继续接收请求;
5. 客户端浏览器解析HTML内容
- 客户端浏览器首先解析状态行,表明请求是否成功的状态代码;
- 然后解析每一个响应头,响应头告知以下若干字节的HTML文档和文档字符集。
- 客户端浏览器读取响应数据HTML,根据HTML语法对其进行格式化,并在浏览器窗口中显示。
四、在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;
3. 浏览器发出读取文件( URL 中域名后面部分对应的文件)的 HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4. 服务器对浏览器请求作出响应,并把对应的 HTML 文本发送给浏览器;
5. 释放 TCP 连接;
6. 浏览器将该 HTML 文本并显示内容。
相关文章:
【面试八股总结】超文本传输协议HTTP(二)
参考资料 :小林Coding、阿秀、代码随想录 一、HTTP缓存技术 将资源(如网页、图像、脚本等)的副本存储在客户端或中间代理服务器上,以便将来的请求可以直接从缓存中获取,而不必重新从服务器下载资源。这有助于减少网…...
SQL Server中视图使用子查询的性能影响与优化方案
在SQL Server中,视图(View)是一种虚拟的表,其内容由查询定义。在视图中,我们可以使用子查询来组合和呈现数据,这为数据呈现提供了灵活性,但同时也可能带来一些性能上的问题。本文将深入分析视图…...
Adaboost集成学习 | Matlab实现基于SVM-Adaboost支持向量机结合Adaboost集成学习时间序列预测(股票价格预测)
目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | 基于SVM-Adaboost支持向量机结合Adaboost集成学习时间序列预测(股票价格预测)基于SVM(支持向量机)和AdaBoost集成学习的时间序列预测(如股票价格预测)是一种结合了两种强大机器学习算…...
Apache DolphinScheduler 【安装部署】
前言 今天来学习一下 DolphinScheduler ,这是一个任务调度工具,现在用的比较火爆。 1、安装部署 1.0、准备工作 1.0.1、集群规划 dolphinscheduler 比较吃内存,所以尽量给 master 节点多分配一点内存,桌面和虚拟机里能关的应用…...
【随笔】Git -- 高级命令(上篇)(六)
💌 所属专栏:【Git】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…...
java中Date类,SimpleDateFormat类和Calendar类
Date类 public Date() 创建一个Date对象,代表的是系统当前此刻的日期时间 public Date(long date) Constructs a Date object using the given milliseconds time value. 把时间毫秒值转变成Date日期对象 public void setTime(long date) Sets an existing Date ob…...
施耐德 PLC 控制系统 产品 + 软件总体介绍 2020
参考 2020.7 官方说明视频:https://www.bilibili.com/video/BV1Mi4y1G7Qc/ 总体说明 施耐德作为工业控制界巨头(公认的几大巨头:西门子、AB、施耐德),PLC 控制器产品线很庞大,涵盖了高中低的完整产品线&…...
UniApp 应用发布到苹果商店指南
🚀 想要让你的 UniApp 应用在苹果商店亮相吗?别着急,让我来带你一步步完成这个重要的任务吧!在这篇博客中,我将详细介绍如何将 UniApp 应用顺利发布到苹果商店,让你的应用跻身于苹果生态之中。 引言 &…...
KamaCoder 46. 携带研究材料(第六期模拟笔试)
题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间࿰…...
MySQL的基本操作(超详细)
👨💻作者简介:👨🏻🎓告别,今天 📔高质量专栏 :☕java趣味之旅 📔(零基础)专栏:MSQL数据库 欢迎🙏点赞&…...
自动驾驶之心规划控制笔记
Search-based Path Planning Methods Path Finding Problem 一般来说指标有距离,耗费时间,能量,或者多目标。 左图是拓扑地图,蓝色的点就是顶点,绿色的线是连接关系。最后得到的是一个从哪里走的一个最优,并非精细解。 右图是栅格地图,这个搜索出来的是在相对分辨率比…...
Linux中部署Java jar 包 shell 脚本
Linux中部署Java jar 包 shell 脚本 #!/bin/bash set -e# 基础 # export JAVA_HOME/work/programs/jdk/jdk1.8.0_181 # export PATHPATH$PATH:$JAVA_HOME/bin # export CLASSPATH$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarDATE$(date %Y%m%d%…...
auto.js v1.4.4 实现自动打卡
一、使用场景 所在公司的打卡软件可以单独变成一个可以点击的APP,所以只需要实现以下步骤: 自动解锁屏幕返回主屏幕并打卡锁定屏幕需要的环境: 手机端下载并且安装 auto.js v4.1.1 PC端VS安装对应的插件学习资料 B站学习资料 对应 第三期&am…...
【Linux实验室】NFS、DHCP的搭建
NFS、DHCP的搭建 1、nfs服务搭建及测试什么是NFS?环境准备服务端机器安装nfs-utils和rpcbind包启动NFS服务创建/data/NFSdata目录,配置nfs文件启动服务挂载测试在服务端在共享目录下创建文件测试在客户端在共享目录下创建文件 2、dhcp服务搭建及测试什么…...
Samba 总是需要输入网络凭证
输入网络凭证: 用户名是 cat /etc/samba/smb.conf,查看 valid users mxw 为用户名。而不是其他账号名或者用户名,更不是登录计算机时的计算机名; 密码是 需要记住安装samba服务器时,自己设置的password࿱…...
图像处理_积分图
目录 1. 积分图算法介绍 2. 基本原理 2.1 构建积分图 2.2 使用积分图 3. 举个例子 1. 积分图算法介绍 积分图算法是图像处理中的经典算法之一,由Crow在1984年首次提出,它是为了在多尺度透视投影中提高渲染速度。 积分图算法是一种快速计算图像区域和…...
B/S架构SaaS模式 医院云HIS系统源码,自主研发,支持电子病历4级
B/S架构SaaS模式 医院云HIS系统源码,自主研发,支持电子病历4级 系统概述: 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查…...
(C)1005 继续(3n+1)猜想
1005 继续(3n1)猜想: 问题描述 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候&a…...
编译好的C++应用程序拷贝到其它电脑,提示dll未找到依赖项的解决方法。
编译好的C应用程序拷贝到其它电脑上,运行时出现提示dll未找到依赖项。 由于dll依赖于其它dll,在开发用电脑上的环境不能完全与其它电脑相同。 解决办法是找到调用到的dll依赖的所有dll,拷贝到运行目录下。 在开发电脑上: 1、开…...
wps 开发插件
官方文档参考wps官方文档参考 1.环境安装 安装wps https://www.wps.cn/ 安装Node.js https://nodejs.org/en 安装代码编辑器 Visual Studio Code https://code.visualstudio.com/ 环境检查-进入cmd查看 node -v2.demo 2.1 demo下载 打开vscode,新建终端 安装…...
C语言----数据在内存中的存储
文章目录 前言1.整数在内存中的存储2.大小端字节序和字节序判断2.1 什么是大小端?2.2 练习 3.浮点数在内存中的存储3.1.引子3.2.浮点数的存储3.2.2 浮点数取的过程 前言 下面给大家介绍一下数据在内存中的存储,这个是一个了解c语言内部的知识点…...
【Linux学习】Linux 的虚拟化和容器化技术
˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…...
Delphi 是一种内存安全的语言吗?
上个月,美国政府发布了 "回到基石 "报告: 通往安全和可衡量软件之路 "的报告。该报告是美国网络安全战略的一部分,重点关注多个领域,包括内存安全漏洞和质量指标。 许多在线杂志都对这份报告进行了评论࿰…...
golang语言系列:Scrum、Kanban等敏捷管理策略
云原生学习路线导航页(持续更新中) 本文是 golang语言系列 文章,主要对编程通用技能 Scrum、Kanban等敏捷管理策略 进行学习 1.什么是敏捷开发 敏捷是一个描述软件开发方法的术语,它强调增量交付、团队协作、持续规划和持续学习。…...
QT背景介绍
🐌博主主页:🐌倔强的大蜗牛🐌 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、QT背景 1.1什么是QT 1.2QT的发展历史 1.3什么是框架、库 1.4QT支持的平台 1.5QT的优点 1.6QT的…...
动态规划详解(Dynamic Programming)
目录 引入什么是动态规划?动态规划的特点解题办法解题套路框架举例说明斐波那契数列题目描述解题思路方式一:暴力求解思考 方式二:带备忘录的递归解法方式三:动态规划 推荐练手题目 引入 动态规划问题(Dynamic Progra…...
前端大额计算,真正解决js精度丢失问题
1.解决前端大额计算导致精度丢失问题 2.从底层上解决这个问题,计算时不使用js 运行时计算。 使用rust语言来解决这个问题,因为是底层语言,不涉及到精度问题。 3.实现步骤 步骤 1: 安装工具 确保你已经安装了Rust工具链和wasm-pack&#x…...
Android笔记--MediaCodec(一)
这一节主要来了解一下MediaCodec,Android MediaCodec 是 Android 平台提供的一个用于处理音频和视频数据的 API。它允许开发者对音频和视频数据进行编码和解码,支持多种格式和编解码器。MediaCodec API 通常用于实现实时音视频处理,如视频录制…...
Linux简单介绍
Linux简单介绍 编译器VMware虚拟机Ubuntu——LinuxOS为什么使用LinuxOS? 目录结构Windows目录结构Linux操作系统home是不是家目录? Linux常用命令终端命令行提示符与权限切换命令tab 作用:自动补全上下箭头pwd命令ls命令mkdir命令touch命令rm…...
Servlet 的基本理解
Servlet 是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能,统一接口。由其他内部厂商如tomcat,jetty内部实现web的功能。如一个http请求到来:容器将请求封装为servlet中的HttpServletRequest对象,调用init()&a…...
新闻宣传wordpress主题/如何优化关键词提升相关度
在安装之前,确认你的机器安装了python,和easy_install.通常python是自动安装的,如果没有安装easy_install,那么wget -q http://peak.telecommunity.com/dist/ez_setup.py获取一下python ez_setup.pypexpect是python一个模块,可以通…...
国内外做的比较好的家装网站/关键词完整版
2019独角兽企业重金招聘Python工程师标准>>> 一.RabbitMq的术语解释 exchange:交换机,一个交换机可以有多个路由(而每一个路由分别指向一个队列)。 queue:队列,一个队列可以对应多个交换机。 route-key:路由…...
温州做美食网站/广东seo推广方案
本篇文章小编给大家分享如何在Python中使用Button组件制作按钮。生活中我们会遇到各种各样的登录界面,比如在登陆QQ时将账号和密码输入完备后,需要点击“登录”才能进入到自己的QQ页面。在Python中,这里的“登录”就是用Button组件制作的一个…...
vm虚拟机搭建wordpress/爱站网影院
数据结构与算法学习笔记(3):线性表Ⅰ 本系列笔记为跟着B站上王卓老师的教程学习所记录的笔记 文章目录数据结构与算法学习笔记(3):线性表Ⅰ一.线性表的定义和特点1.定义2.特点线性表的逻辑特征二.典型案例1.一元多项式运算2.稀疏多项式3.图书信息管理系统逻辑结构存储结构可以用…...
沈阳网站建站公司/环球网
Windows10上安装了 kafka 和 zookeeper ,用于日常开发。 以前用就没有什么问题,今天连接的时候,kafka启动就闪退,zookeeper 上还输出了一行信息 远程主机强迫关闭了一个现有的连接 估计是先前用的时候,异常关闭导致…...
彩票网站开发有连带/qq空间秒赞秒评网站推广
通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程:递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend引擎, 加载注册的扩展模块。初始化完成后读取脚本文件,Zend引…...