HTTP?HTTPS?HTTP2.0

Http 

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式、超媒体信息系统的应用层协议。它基于TCP/IP通信协议来传递数据,如HTML文件、图片文件等。以下是HTTP的详细解析:

一、HTTP的基本概述

  • 定义:HTTP是一种用于从网络传输超文本到本地浏览器的传输协议,它定义了客户端与服务器之间请求和响应的格式。
  • 版本:HTTP有多个版本,包括HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3。每个版本都在前一版本的基础上进行了改进和增强。

  • 特点:HTTP是无连接的,即每次连接只处理一个请求,服务器处理完客户请求并收到客户的应答后,就断开连接;HTTP是无状态的,即HTTP协议对事务处理没有记忆能力;HTTP是媒体独立的,只要客户端和服务器知道如何处理数据内容,任何的数据内容都可以通过HTTP传送。

二、HTTP的工作流程

HTTP的工作流程通常包括以下几个步骤:

  1. 建立连接:客户端与服务器之间建立连接,这通常基于TCP/IP协议。在HTTP/2和HTTP/3中,则使用了更先进的传输层协议。
  2. 发送请求:客户端向服务器发送请求,请求中包含要访问的资源的URL、请求方法(如GET、POST、PUT、DELETE等)、请求头以及可选的请求体。
  3. 处理请求:服务器接收到请求后,根据请求中的信息找到相应的资源,执行相应的处理操作。
  4. 发送响应:服务器将处理后的结果封装在响应中,并将其发送回客户端。响应包含状态码、响应头以及可选的响应体。
  5. 关闭连接:在完成请求-响应周期后,客户端和服务器之间的连接可以被关闭,除非使用了持久连接(如HTTP/1.1中的keep-alive)。

三、HTTP的请求与响应

1. HTTP请求

HTTP请求由以下几个部分组成:

  • 请求行:包含请求方法、请求的URL和HTTP协议版本。
  • 请求头:包含请求的附加信息,如Accept、User-Agent、Connection等。
  • 空行:用于分隔请求头和请求体。
  • 请求体:可选的,对于POST或PUT请求,请求体中包含要发送给服务器的数据。

2. HTTP响应

HTTP响应也由以下几个部分组成:

  • 状态行:包含HTTP协议版本、状态码和状态消息。状态码用于指示请求的成功或失败。
  • 响应头:包含响应的附加信息,如Content-Type、Content-Length、Date等。
  • 空行:用于分隔响应头和响应体。
  • 响应体:可选的,包含服务器返回给客户端的数据,如HTML页面、图像数据等。

四、HTTP的请求方法

HTTP定义了一组请求方法,以表明要对给定资源执行的操作。常见的请求方法包括:

  • GET:请求一个指定资源的表示形式。
  • POST:将实体提交到指定的资源,通常会导致服务器上的状态变化或副作用。

  • PUT:向服务器上传资源,通常用于更新已存在的资源或创建新的资源。
  • DELETE:删除指定的资源。
  • HEAD:请求一个与GET请求的响应相同的响应头,但没有响应体。
  • OPTIONS:请求服务器返回支持的HTTP方法和其他选项。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • PATCH:用于对资源应用部分修改。

五、HTTP状态码

HTTP状态码由三个十进制数字组成,用于指示请求的成功或失败。常见的状态码类型包括:

  • 1xx(信息性状态码):表示接收的请求正在处理。
  • 2xx(成功状态码):表示请求正常处理完毕。
  • 3xx(重定向状态码):需要后续操作才能完成这一请求。
  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。
  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。

六、HTTPS与HTTP的区别

HTTPS(Hypertext Transfer Protocol Secure)是HTTP的安全版本,它在HTTP下增加了SSL/TLS协议,提供了数据加密、完整性校验和身份验证。HTTPS和HTTP的主要区别包括:

  • 端口号:HTTP通常使用端口80,而HTTPS通常使用端口443。
  • 安全性:HTTP是明文传输,而HTTPS是加密传输,更加安全。
  • 性能:由于加密和解密过程,HTTPS可能会增加CPU的使用率和延迟,

Http1与HTTP2 

http1.0与http1.1

  • http1.0:每次请求都需要重新建立tcp连接,请求完后立即断开与服务器连接,这很大程度造成了性能上的缺陷,http1.0被抱怨最多的就是连接无法复用。
  • http1.1:引入了长连接(keep-alive),相较于1.0减少了连接和关闭的延迟,提高了效率,但是若干个请求还是需要串行排队处理,如果一旦某个请求超时,后面的就会被阻塞,也就是常说的线头阻塞。

1. 传输格式

  • HTTP1:使用文本格式(通常是ASCII)来传输数据。这种文本格式虽然方便调试,但解析起来可能不够高效,且可能因为编码问题导致解析错误。
  • HTTP2:引入了二进制格式传输数据。二进制格式不仅解析起来更高效,而且更加健壮,减少了因编码问题导致的错误。

2. 连接管理

  • HTTP1:在HTTP1.0中,每次请求都需要重新建立TCP连接,并在请求完成后立即断开连接。HTTP1.1虽然引入了长连接(keep-alive),但多个请求仍然需要串行排队处理,存在队头阻塞问题。
  • HTTP2:通过引入流(stream)和帧(frame)的概念,实现了多路复用。这意味着一个TCP连接可以同时承载多个请求和响应,大大提高了连接的利用率和效率。此外,HTTP2还解决了HTTP1中的队头阻塞问题,因为多个请求和响应可以并行处理。

3. 首部压缩

  • HTTP1:HTTP1.x的头部信息通常很大,且每次请求都会重复发送相同的头部信息,这浪费了带宽并增加了延迟。
  • HTTP2:通过HPACK算法对头部进行压缩,通讯双方各自缓存一份header请求头表,避免了重复的header传输,并显著减少了需要传输的头部数据量。这不仅节省了带宽,还提高了传输效率。

4. 服务器推送

  • HTTP1:不支持服务器主动推送资源。客户端需要明确请求所需的资源,然后服务器才会响应这些请求。
  • HTTP2:支持服务器推送(server push)功能。当客户端请求某个资源时,服务器可以预测并主动推送与该资源相关的其他资源,而无需客户端再次发起请求。这可以减少延迟并提高页面加载速度。

5. 性能提升

  • HTTP2:通过上述的改进(如二进制格式、多路复用、首部压缩和服务器推送),HTTP2在性能上有了显著提升。它不仅减少了延迟和带宽消耗,还提高了网页的加载速度和用户体验。

综上所述,HTTP2相比HTTP1在传输格式、连接管理、首部压缩、服务器推送和性能提升等方面都有显著的优势。这些优势使得HTTP2成为现代Web开发中不可或缺的一部分。在前端面试中,了解这些区别有助于更好地理解HTTP协议的发展趋势和前端性能优化的策略。

一次完整的HTTP请求所经历的步骤 

 

 

1. URL输入与解析

  • URL输入:用户在浏览器的地址栏中输入www.baidu.com并按下回车键。
  • URL解析:浏览器检查输入的URL是否合法且完整。如果不完整,浏览器会尝试补全(虽然对于www.baidu.com这样的常见网址,通常不需要补全)。如果URL不合法,浏览器可能会将其作为搜索条件提交给默认搜索引擎。

2. DNS域名解析

  • 查询本地缓存:浏览器首先检查其缓存和本地hosts文件中是否有该域名的IP地址记录。
  • 查询本地DNS服务器:如果本地缓存中没有找到,浏览器会向配置的本地DNS服务器发起查询请求。
  • 递归查询:如果本地DNS服务器也没有该域名的记录,它会向根DNS服务器发起查询,并逐步向下(顶级域DNS服务器、权威DNS服务器)直到找到对应的IP地址。
  • 获取IP地址:最终,DNS查询会返回www.baidu.com对应的IP地址(例如,220.181.27.48,但请注意IP地址可能会随时间变化)。

3. 建立TCP连接

  • 三次握手:浏览器使用获得的IP地址和服务器默认的HTTP端口(通常是80端口,对于HTTPS则是443端口)进行TCP连接。TCP连接通过三次握手建立,确保双方通信的可靠性。
    • 第一次握手:客户端发送SYN报文段到服务器,并进入SYN_SENT状态。
    • 第二次握手:服务器收到SYN报文段后,发送SYN+ACK报文段给客户端,并进入SYN_RCVD状态。
    • 第三次握手:客户端收到服务器的SYN+ACK报文段后,发送ACK报文段给服务器,然后进入ESTABLISHED状态,服务器收到ACK报文段后也进入ESTABLISHED状态,此时TCP连接建立成功。

4. 发送HTTP请求

  • 构建HTTP请求报文:浏览器根据用户输入的URL和可能的查询参数等,构建HTTP请求报文。请求报文包括请求行(如GET / HTTP/1.1)、请求头(如Host: www.baidu.comUser-Agent: ...等)和请求体(对于GET请求,请求体通常为空)。
  • 发送请求:浏览器通过TCP连接将HTTP请求报文发送给服务器。

5. 服务器处理请求并返回响应

  • 处理请求:服务器收到HTTP请求后,根据其请求行和请求头等信息,处理请求并生成相应的响应数据。
  • 构建HTTP响应报文:服务器构建HTTP响应报文,包括状态行(如HTTP/1.1 200 OK)、响应头(如Content-Type: text/html等)和响应体(如HTML文档)。
  • 发送响应:服务器通过TCP连接将HTTP响应报文发送给浏览器。

6. 浏览器解析渲染页面

  • 解析HTML:浏览器接收到HTTP响应后,首先解析HTML文档,构建DOM树。
  • 解析CSS:浏览器接着解析CSS样式表,构建CSSOM树。
  • 构建渲染树:浏览器将DOM树和CSSOM树合并成渲染树。
  • 渲染页面:浏览器根据渲染树将页面绘制到屏幕上。

7. 断开TCP连接

  • 四次挥手:HTTP/1.1中,默认情况下会保持TCP连接(即使用长连接),以便在同一连接上发送多个请求和响应。然而,当不需要再发送请求时,TCP连接会通过四次挥手来优雅地关闭。
    • 第一次挥手:客户端发送FIN报文段给服务器,并进入FIN_WAIT_1状态。
    • 第二次挥手:服务器收到FIN报文段后,发送ACK报文段给客户端,并进入CLOSE_WAIT状态。客户端收到ACK报文段后进入FIN_WAIT_2状态。
    • 第三次挥手:服务器完成所有数据传输后,发送FIN报文段给客户端,并进入LAST_ACK状态。
    • 第四次挥手:客户端收到FIN报文段后,发送ACK报文段给服务器,并进入TIME_WAIT状态。服务器收到ACK报文段后关闭连接,客户端在经过一段时间(通常是2MSL,即最大报文生存时间)后也关闭连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手撕C++入门基础

1.C介绍 C课程包括:C语法、STL、高阶数据结构 C参考文档:Reference - C Reference C 参考手册 - cppreference.com cppreference.com C兼容之前学习的C语言 2.C的第一个程序 打印hello world #define _CRT_SECURE_NO_WARNINGS 1 // test.cpp // …

Unity Dots学习 (一)

先学习怎么使用,再研究底层代码。Dots大家都有所耳闻。一直没时间研究,最近研究一下 看上图可知,哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料: 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…

景联文科技:图像标注的类型有哪些?

图像标注是计算机视觉领域中一个非常重要的步骤,它是创建训练数据集的关键组成部分,主要用于帮助机器学习算法理解图像内容。 以下是图像标注的一些主要类型: 1. 边界框标注: • 这是最常见的标注方式之一,通常用于…

第四范式发布AI+5G视频营销产品 助力精准获客与高效转化

产品上新 Product Release 今天,第四范式AI5G视频电话互动营销产品全新发布。 相较于以往销效率低、互动差、转化差的传统电话外呼和短信营销方式,视频电话互动营销基于AI、5G等技术,可让用户接听电话时观看个性化视频广告并实时互动&#xf…

Unity的UI设计

目录 创建和布局 布局与交互 性能优化 最佳实践 学习资源 Unity UI Toolkit与uGUI和IMGUI之间的具体区别和适用场景是什么? Unity UI Toolkit uGUI IMGUI 如何在Unity中实现响应式UI设计以适应不同设备尺寸? Unity UI性能优化的最新技术和方法…

机器学习:逻辑回归算法实现鸢尾花预测和银行数据处理

1、鸢尾花预测 1、特征选择 2、对特征处理 trainpd.read_excel("鸢尾花训练数据.xlsx") testpd.read_excel("鸢尾花测试数据.xlsx") x_traintrain[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]] y_tr…

Vue 生命周期详解含demo、面试常问问题案例

Vue 生命周期详解、面试常问问题案例 含 demo 文章目录 Vue 生命周期详解、面试常问问题案例 含 demo一、Vue 生命周期是什么二、Vue 中如何使用生命周期钩子1. **beforeCreate**2. **created**3. **beforeMount**4. **mounted**5. **beforeUpdate**6. **updated**7. **beforeD…

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…

php-xlswriter实现数据导出excel单元格合并,内容从指定行开始写

最终效果图: 代码: public function export_data() {$list $this->get_list_organ();$content [];$content[] []; // 第2行不设置内容,设置为空foreach ($list as $key > $value) {$content[] [$value[organ_name], $value[clas…

动态规划——背包问题(01背包、完全背包,分组背包与二进制优化)

本蒟蒻写二进制优化开始的时候写昏了,并且昏了一下午。但好在有神犇救命,这篇博客才得以面世——躲着人群 一、01背包 概述: 其常见的问题形式为:给出n个物品,每个物品有对应的价值和体积。给出背包容量后求不超过背…

JNI编程二:JNI数据类型

目录 前言一、数据类型 jclass / jobject二、JNI常见的数据类型三、运用数据类型3.1 修改String类型的变量3.2 修改int类型的变量 前言 前面阐述了JNI的开发流程,接下来探究JNI中的数据类型。编码承接上文JNI编程一:JNI开发流程 一、数据类型 jclass /…

STM32——I2C和SPI波形分析

波形分析 I2C波形 //写命令 void OLED_WR_CMD(uint8_t cmd) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100); } //写数据 void OLED_WR_DATA(uint8_t data) { HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&am…

第三届IEEE云计算、大数据应用与软件工程国际学术会议 (IEEE-CBASE 2024,10月11-13)

第三届IEEE云计算、大数据应用与软件工程国际学术会议 ( CBASE 2024 )将于2024年10月11—13日在中国杭州举办。 该会议在连续两届成功举办的基础上,本届将由浙江水利水电学院、浙江省自动化学会、浙江省科协智能制造学会联合体主办,浙江水利水…

【轻松拿捏】设计模式六大基本原则(一)单一职责原则(SRP - Single Responsibility Principle)

🎈边走、边悟🎈迟早会好 一. 概述 单一职责原则(SRP - Single Responsibility Principle)是面向对象设计中的一个基本原则。它的核心思想是:一个类只应有一个引起它变化的原因,也就是说,一个类…

git clone报错unable to access

网页能够访问github.com和外网,git 也是安装了最新版,但是在使用 git clone xxx 时就报错: $ git clone https://github.com/XXX.git Cloning into XXX... fatal: unable to access https://github.com/XXXc.git/: OpenSSL SSL_connect: SSL…

C ++初阶:C++入门级知识点

目录 🌞0.前言 🚈1.C输入输出 🚈2.缺省参数 🚝2.1全缺省参数 🚝2.2半缺省参数 🚈3.函数重载 🚝3.1参数类型不同 🚝 3.2参数个数不同 🚝3.3参数类型顺序不同 ​…

相似度计算方法-编辑距离 (Edit Distance)

定义 编辑距离(Edit Distance),也称为Levenshtein距离,是一种衡量两个字符串相似度的方法。它定义为从一个字符串转换为另一个字符串所需的最少单字符编辑操作次数,这些操作包括插入、删除或替换一个字符。 计算方法 …

Mysql(三)---增删查改(基础)

文章目录 前言1.补充1.修改表名1.2.修改列名1.3.修改列类型1.4.增加新列1.5.删除指定列 2.CRUD3.新增(Create)3.1.单行插入3.2.指定列插入3.3.多行插入 4.数据库的约束4.1.约束的分类4.2.NULL约束4.3.Unique约束4.4.Default 默认值约束4.5.PRIMARY KEY:主键约束4.6.…

谷哥剪映助手实操,批量自动化制作左右分屏视频

我给大家介绍如何用谷哥剪映助手,配合剪映批量制作左右分屏或上下分屏视频。 首先我们准备好剪映参考草稿,草稿里有主轨和复轨两条素材。一般情况下,副轨比主轨时长更长。剪映助手将根据主轨时长裁切副轨。 这里需要注意的是,在批…

十五年以来 — 战略性云平台服务的演进路径之全面呈现(含亚马逊、微软和谷歌)

Gartner每年都发布对全球IaaS平台进行评估的魔力象限报告。2023年底,Gartner将此项评估的名称改为“战略性云平台服务”(Strategic cloud platform services),尽管其核心仍为IaaS,但是,毫无疑问&#xff0c…