计算机网络八股——HTTP协议与HTTPS协议
目录
HTTP1.1简述与特性
1. 报文清晰易读
2. 灵活和易于扩展
3. ⽆状态
Cookie和Session
4. 明⽂传输、不安全
HTTP协议发展过程
HTTP/1.1的不足
HTTP/2.0
HTTP/3.0
HTTPS协议
HTTP协议和HTTPS协议的区别
HTTPS中的加密方式
HTTPS中建立连接的方式
前言:
到时候我想要写一篇文章就是:在浏览器中输入URL并按下回车会发生什么?
然后将几篇文章全部串联到一起,现在几天的任务就是将这里的每个小部分进行一个详细的介绍
HTTP1.1简述与特性
Web 上的通信都是建⽴在 HTTP 协议上的:
1. 客户端发起 HTTP 请求;
2. 服务器做出响应处理后,返回 HTTP 响应报⽂;
HTTP协议主要有以下特点:(注意这里指的是HTTP1.1协议的特性,对于更高级版本的HTTP协议里,很多特性已经不再适合。)
- 报文格式简单,易于阅读
- 灵活和易于扩展
- ⽆状态
- 明⽂传输、不安全
下面我将详细介绍以下HTTP协议的这几个特点:
1. 报文清晰易读
HTTP基本报⽂格式为header+body,头部信息也是key-value简单⽂本的形式,易于理解。
HTTP/1.1 的报文格式非常便于阅读,因为它:
- 是文本格式: 请求行、状态行和头部都是由可读的 ASCII/ISO-8859-1 字符组成的文本行。
- 结构清晰: 头部是简单的 "Key: Value" 形式,每行一个头部字段,以空行结束头部,后面跟着报文体(如果存在)。
这使得开发者、系统管理员等可以很方便地使用 telnet、curl -v 或者查看网络抓包工具(如 Wireshark)中的文本视图来直接阅读、理解和调试 HTTP/1.1 报文。

2. 灵活和易于扩展
HTTP协议⾥的各种请求⽅法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,允许开发⼈员⾃ 定义和扩充; HTTP⼯作在应⽤层(OSI第七层),下层可以随意变化;
HTTPS就是在HTTP与TCP之间增加了SSL/TSL安全传输层,HTTP/3把TCP换成了基于UDP的QUIC。
常见状态码详细介绍
HTTP 协议规范(以及后续的 RFC 文档)定义了大量的标准状态码,用于表示服务器对客户端请求的处理结果。这些状态码被分组在不同的类别中:
HTTP 状态码(Status Code)只包含在 HTTP 响应报文中。它是响应报文的起始行(Status-Line)的一部分。
如果客户端收到了来自目标地址的有效的 HTTP 响应报文,并且其中包含了 HTTP 状态码,那么这基本上可以确定您已经成功连接到了目标服务器。

1xx
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
2xx
2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。 「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都 会有 body 数据。 「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。 「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源 的全部,而是其中的一部分,也是服务器处理成功的状态。
3xx
3xx 类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源, 也就是重定向。 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次 访问。 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
301 和 302 都会在响应头里使用字段 Location ,指明后续要跳转的 URL,浏览器会自动重定向新的
URL。 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定 向,用于缓存控制。
4xx
4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。 「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。 「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
5xx
5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误 码。 「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并 不知道。 「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问 后端服务器发生了错误。 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍 后重试”的意思。
3. ⽆状态
无状态
服务器不会保留任何关于客户端在之前请求中的信息或状态。每一次 HTTP 请求都是完全独立的,服务器处理当前的请求时,不会记住或依赖于客户端之前发送的任何请求。
简单来说,就像服务器得了“短期失忆症”。客户端每发送一个请求给服务器,服务器就像是第一次见到这个客户端一样,它只根据当前请求报文中的信息来进行处理和响应。
无状态带来了什么影响?
优点:
最大的优点就是:服务器设计简单: 服务器不需要为每个客户端维护大量的状态信息,大大简化了服务器的设计。
缺点:
- 每次请求需要携带足够的信息: 由于服务器不记事儿,客户端每次发送请求时,必须携带所有必要的信息来完成本次请求。例如,如果要访问需要登录才能看到的页面,每次请求都需要带上身份认证信息。
- 需要额外的机制来管理会话状态: 对于需要保持用户状态的应用(如购物车、用户登录),仅仅依赖无状态的 HTTP 是不够的。为了记住用户是谁、购物车里有什么,需要在 HTTP 协议之上引入其他的技术或方法来管理状态。
通过 Cookie(在客户端存储标识符)和 Session(在服务器端存储具体状态),我们就可以在无状态的 HTTP 协议上构建有状态的 Web 应用。
Cookie和Session
Cookie(客户端)中常见的保存内容包括:
- 会话标识符 (Session ID): 这是最常见和核心的用途。Cookie 中通常存储一个由服务器生成的唯一的 Session ID,用于在服务器端查找对应的 Session 数据。这个 Session ID 是服务器在用户第一次访问时生成的,并通过 HTTP 响应头部的
Set-Cookie发送给浏览器。之后,浏览器在向同一个网站发送后续请求时,会自动在请求头部的Cookie字段中带上这个 Session ID 发送给服务器。
- 用户偏好设置: 比如用户选择的语言、主题、页面布局、是否记住用户名等简单的配置信息。
- 跟踪信息: 用于网站分析或广告跟踪,记录用户的访问行为、来源、最后访问时间等标识符或简单数据。
- 状态标志: 例如,用户是否已经看过某个新手引导、某个弹窗广告,或者接受了 Cookie 政策等。
- “记住我”功能相关的 Token: 为了实现长期登录(“记住我”),Cookie 中会存储一个由服务器生成的、用于下次访问时自动登录的 Token 或标识符,而不是直接存储用户名和密码(非常不安全)。
Cookie 保存的是用于在客户端和服务器之间传递或在客户端本地持久化少量信息的文本数据,主要用于用户识别、状态管理和个性化设置等方面,绝对不应该在 Cookie 中直接存储敏感信息,特别是用户的密码。
Cookie 一般可以被设置为在客户端长久保存,几天、几个月甚至几年。
Session(服务器端): Session 机制则负责在服务器端存储用户的具体状态信息。服务器接收到客户端发送的请求后,从 Cookie 中读取 Session ID。然后根据这个 Session ID,在服务器端的内存、数据库、文件或缓存(如 Redis)中查找对应的用户状态数据(例如:用户是否已登录、用户的用户名、购物车中的商品列表、用户的权限等)。
Session 的目的是为了在一次连续的、相对短暂的用户访问过程中维持状态。一旦用户离开、长时间不活动或明确结束会话,相关的 Session 数据就会被清理,以确保服务器资源的有效利用和数据安全。
服务器端的 Session 是临时存在的
4. 明⽂传输、不安全
HTTP 报文(特别是头部信息、请求 URL、以及报文体如果是文本格式的内容)在客户端和服务器之间传输时,是不经过加密的,直接以文本(字符串)的形式在网络上传输。
-
易于理解和调试: 正因为是明文,开发者或管理员可以使用抓包工具(如 Wireshark)或者在浏览器开发者工具中直接看到 HTTP 请求和响应的详细内容,非常便于理解和调试。
-
安全性风险: 这是明文传输最大的问题。由于数据是直接可读的,如果传输的内容包含敏感信息,比如:登录的用户名和密码,用户在表单中输入的个人信息,请求的 URL 本身(可能包含敏感参数)。
任何能够截获网络流量的第三方(比如在同一个 Wi-Fi 下的人、互联网服务提供商、网络路由器等)都可以直接读取这些信息,造成数据泄露的风险。
为了解决 HTTP 的明文传输带来的安全问题,就引入了 HTTPS。HTTPS 是在 HTTP 和 TCP 之间增加了一层 SSL/TLS 加密层。这样一来,即使 HTTP 报文内容是明文的,但在通过网络传输之前,整个报文会被 SSL/TLS 层加密,变成只有服务器(拥有私钥)才能解密的密文。传输过程中的第三方截获到的将是无法解读的乱码,大大提高了通信的安全性。
HTTP协议发展过程
⽬前为⽌,HTTP 常⻅的版本有 HTTP/1.1 , HTTP/2.0 , HTTP/3.0 ,不同版本的 HTTP 特性是不⼀样的。我们上面介绍到的HTTP/1.1的很多特点已经不适用 HTTP/2.0 , HTTP/3.0了。
关于HTTP1.1之前的版本我们就来进行简单了解一下就行啦:
HTTP/0.9
HTTP/0.9 是最早的HTTP版本,在1991年就已经发布,只⽀持 GET ⽅法,也没有请求头,服务器只能返回 HTML格式的内容。
HTTP/1.0
HTTP/1.0 是HTTTP 协议的第⼀个正式版本, 主要具有以下特性:
引⼊了请求头和响应头,⽀持多种请求⽅法和状态码
不⽀持持久连接,每次请求都需要建⽴新的连接,属于短连接
为了解决 HTTP/1.0 每次请求都需要建⽴新的连接的问题, HTTP/1.1 提出了⻓连接(持久连接),只要客户端和 服务器任意⼀端没有明确提出断开连接,则保持TCP连接状态。


HTTP/1.1的不足
首先说一下HTTP/1.1的一些其他缺点,当然这是相对于HTTP/2.0的改进来说的啦。
1. 在 HTTP/1.1 中,为了确保通信的正确性和可靠性,客户端通常会等待接收到一个请求的完整响应后,才在同一个持久连接上发送下一个请求。
关于HTTP请求,我想先补充一下:访问一个网页(输入一次网址)需要发出多次 HTTP 请求这个知识。
一个标准的 HTTP 请求是为了获取一个特定的“资源”(Resource)。在很多情况下,这个“资源”对应于服务器上的一个文件(比如一个 HTML 文件、一个 CSS 文件、一个图片文件)。
一个网页是由多个文件进行组成的,所以访问一个网页需要多次发出HTTP请求,而我们的HTTP1.1协议的请求必须等到上一个HTTP请求的响应到达才可以发送下一个。这就导致浏览器渲染页面时候渲染得很慢,因为数据可能需要一段时间才能完全准备好。
虽然HTTP/1.1 理论上有一个叫做**管线化(Pipelining)**的功能,允许客户端在收到上一个请求的响应之前就发送下一个请求。如果管线化被完全启用且工作正常,那么就不需要等收到响应再发送下一个请求。但是几乎没有浏览器会采用HTTP/1.1的管线化。
因为HTTP1.1的管线化要求数据必须顺序响应,比如请求了1,2,3,响应也必须按照1,2,3来响应。
在 HTTP/1.1 开启管线化后,接收响应的顺序和请求顺序不一致(比如请求 1, 2, 3,响应收到 2, 1, 3),通常会导致直接的错误,浏览器也很难进行有效的暂存和重组。
原因在于 HTTP/1.1 是基于文本流的协议,并且在同一个连接上,客户端解析响应必须是严格按照顺序来的。感觉HTTP/1.1的管线化很鸡肋,所以一般不开启HTTP1.1的管线化也正常!
为了提高HTTP/1.1请求响应速度,我们可以采用如下优化方式:
1. 建立多条tcp连接,这是现代浏览器在处理 HTTP/1.1 网页时默认采用的策略。它们通常会限制对同一个域名同时建立的连接数(一般是 6-8 个)。
2. 将一些文件内容尽可能合并,减少需要传输的文件数量,例如,将多个 CSS 文件合并成一个 CSS 文件,将多个 JS 文件合并成一个 JS 文件,将多个小图片合并成一个雪碧图 - Sprite Image)。
雪碧图:
- 将网页中多个小图片(例如各种图标、按钮背景、小装饰图等)合并到一张大的图片文件中。
- 在网页中使用这些小图片时,不再分别引用原始的单个图片文件。而是将需要使用小图片元素的背景图片设置为这张大的雪碧图。
- 然后,通过 CSS 的
background-position属性,精确地控制元素的背景图片显示区域,只显示雪碧图中的某个特定小图片部分。同时设置元素的width和height来定义这个显示区域的大小。
HTTP/2.0
二进制分帧层 (Binary Framing Layer):
- 特点: 这是 HTTP/2 最基础的变化。HTTP/2 不再是 HTTP/1.1 那样的纯文本协议,而是在应用层和传输层之间增加了一个二进制分帧层。HTTP/2 的所有通信都被分解为更小的、带有标识符和长度前缀的二进制帧 (Frames)。
- 工作原理: 不同类型的消息(如头部、数据)都被封装在不同类型的帧中。这些帧拥有流标识符 (Stream Identifier),用于区分它们属于哪个请求或响应。
- 带来的改进: 这是实现 HTTP/2 其他所有高级特性的基础。将报文分割成帧使得多路复用、优先级控制等成为可能,改变了 HTTP/1.1 基于文本和顺序解析的模式。
多路复用 (Multiplexing):
- 特点: 允许在单个 TCP 连接上同时发送和接收多个 HTTP 请求和响应,并且它们可以乱序发送和到达。
- 工作原理: 通过二进制分帧和流(Stream)的概念实现。每个请求/响应都在一个独立的逻辑流中进行,由唯一的 Stream ID 标识。不同流的帧可以在同一个 TCP 连接上交错发送。客户端和服务器根据帧的 Stream ID 将它们重新组装成完整的请求或响应。
- 带来的改进 (解决 HTTP/1.1 队头阻塞和多连接开销): 这是 HTTP/2 解决 HTTP/1.1 应用层队头阻塞问题的核心机制。一个请求/响应的延迟不会阻塞同一连接上的其他请求/响应。同时,它大幅减少了 HTTP/1.1 中为了提高并行度而不得不建立多个 TCP 连接的开销(三次握手、四次挥手、慢启动等),降低了延迟和服务器资源消耗。
头部压缩 (Header Compression - HPACK):
- 特点: 有效地压缩 HTTP 头部,减少重复数据的传输。
- 工作原理: HTTP/2 使用 HPACK 压缩算法。它在客户端和服务器之间维护和更新一个共享的头部信息表,包括静态表(预定义常见的头部字段)和动态表(记录本次连接中发送过的头部)。传输头部时,如果头部字段是表中已有的,只需发送其索引;如果是新的字段,则发送其值并更新表。此外,还使用了 Huffman 编码对字符串进行压缩。
- 带来的改进 (解决头部冗余): 大幅减少了重复发送的头部数据量,特别是在请求同一个网站的多个资源时,头部通常非常相似,压缩效果显著,节省了带宽,提高了传输效率。
强制使用 HTTPS (De Facto Requirement for HTTPS):
- 特点: 虽然 HTTP/2 规范本身允许在明文 TCP 上运行(称作
h2c),但目前绝大多数主流浏览器(如 Chrome, Firefox, Edge, Safari)只支持在 TLS/SSL 加密连接上运行 HTTP/2(称作h2)。 - 带来的影响: 实际上促使了网站向 HTTPS 迁移,因为只有使用了 HTTPS,才能享受到 HTTP/2 带来的性能优势,从而提高了整个 Web 的安全性。
HTTP/3.0
HTTP/2.0仍然可能面临传输层(TCP 层面)的队头阻塞问题。
因为 HTTP/2 的所有流(Streams)的数据帧都是在同一个 TCP 连接上进行传输的,它们的数据是被混合(多路复用)在一起发送的。如果 TCP 连接中的一个数据包丢失了,并且这个数据包中包含了多个 HTTP/2 流的帧数据,那么 TCP 层面的阻塞会导致所有这些流以及后续流的数据都无法及时递交给 HTTP/2 层进行处理和重组,直到丢失的数据包被恢复。
HTTP/3: 基于 UDP 的 QUIC 协议,提供了传输层面的多路复用。QUIC 的流是独立的,一个流的丢包不会阻塞其他流的数据传输。因此,HTTP/3 彻底解决了队头阻塞问题(包括应用层和传输层)。但是目前HTTP/3.0应用不广泛,目前用的最多的还是HTTP/2.0。
HTTPS协议
HTTP协议和HTTPS协议的区别
HTTP:超文本传输协议
HTTPS:超文本安全传输协议
HTTPS 本质上不是一个全新的、独立的协议,它更准确地说是一个 在安全层上运行的 HTTP 协议。它是在标准的 HTTP 协议与底层的传输协议(主要是 TCP)之间插入了 TLS/SSL(传输层安全/安全套接层) 协议。
当您建立一个安全的 HTTPS 连接时,实际使用的是 TLS 协议(通常是 TLS 1.2 或 TLS 1.3)
TLS 是 SSL 的继任者(或升级版本)。它是基于 SSL 3.0 演变而来的。SSL 版本(特别是 SSL 2.0 和 SSL 3.0)由于存在已知的严重安全漏洞,已经被弃用了。我们现在可以认为HTTPS = HTTP + TLS。
-
安全性 (Security):
- HTTP: 数据在客户端和服务器之间以明文形式传输。这意味着任何能够截获网络流量的第三方(如网络管理员、ISP、攻击者)都可以直接读取传输的数据内容,包括敏感信息(用户名、密码、支付信息等)。数据也容易被篡改而客户端无法得知。
- HTTPS: 数据在传输前会经过 TLS/SSL 加密。截获的数据是加密后的密文,难以解读。TLS/SSL 还提供数据完整性检查,确保数据在传输过程中没有被篡改。此外,通过服务器身份认证(通常基于数字证书),客户端可以确认正在通信的服务器是合法的,防止中间人攻击。
- HTTP: 数据在客户端和服务器之间以明文形式传输。这意味着任何能够截获网络流量的第三方(如网络管理员、ISP、攻击者)都可以直接读取传输的数据内容,包括敏感信息(用户名、密码、支付信息等)。数据也容易被篡改而客户端无法得知。
-
协议层级 (Protocol Stack):
- HTTP: 直接运行在 TCP 协议之上。
- HTTPS: 运行在 TLS/SSL 协议之上,而 TLS/SSL 又运行在 TCP/UDP 协议之上。简而言之,是 HTTP -> TLS/SSL -> TCP/UDP。
-
URL 前缀 (URL Scheme):
- HTTP: 使用
http://。 - HTTPS: 使用
https://。
- HTTP: 使用
-
默认端口 (Default Port):
- HTTP: 默认使用端口 80。
- HTTPS: 默认使用端口 443。
-
证书要求 (Certificate Requirement):
- HTTP: 不需要任何证书。
- HTTPS: 服务器必须拥有由受信任的证书颁发机构 (CA) 颁发的 SSL/TLS 数字证书。这个证书用于证明服务器的身份。虽然获取证书曾需要付费,但现在有许多机构提供免费证书(如 Let's Encrypt)。
-
连接建立过程 (Connection Process):
- HTTP: TCP 三次握手即可开始传输 HTTP 数据。
- HTTPS: 在 TCP 三次握手之后,还需要进行 TLS/SSL 握手过程。这个握手过程用于协商加密算法、交换密钥、进行身份验证等。这会增加一些初始连接建立的延迟。
HTTP 本身不加密,HTTPS 的加密是由 TLS/SSL 层完成的,通过复杂的握手过程(利用非对称加密和证书认证)来安全地协商出会话期间用于数据传输的对称密钥,然后使用该对称密钥对所有 HTTP 数据进行快速加密传输。
HTTPS中的加密方式
对称加密
对称加密也称为私钥加密,使⽤相同的密钥来进⾏加密和解密。 在加密过程中,明⽂数据通过应⽤特定的算法和密钥进⾏加密,⽣成密⽂数据。解密过程则是将密⽂数据应⽤ 同样的算法和密钥进⾏解密,恢复为明⽂数据。 由于加密和解密都使⽤相同的密钥,因此对称加密算法的速度通常较快,但密钥的安全性很重要。如果密钥泄漏,攻击者可以轻易地解密数据。
对称加密指的就是,双方都知道加密的算法,并且都拥有解密的钥匙,但是这个钥匙如果不小心被攻击者知道的话,即使双方通信时使用的是加密好的文件,攻击者也可以用偷来的钥匙进行解开。你可能会想为什么这个私钥有机会被攻击者偷到呢?因为这个私钥一定是需要一方通过网络明文传递给另一方的,这样就给了攻击者可乘之机。
⾮对称加密
⾮对称加密也称为公钥加密,使⽤⼀对不同但相关的密钥:公钥和私钥。 公钥⽤于加密数据,私钥⽤于解密数据。如果使⽤公钥加密数据,只有拥有相应私钥的⼈才能解密数据;如果 使⽤私钥加密数据,可以使⽤相应公钥解密。 除了加密和解密,⾮对称加密还⽤于【数字签名】,可以验证消息的来源和完整性。
非对称加密实际上是把制作这把锁的方法公开,任何人都可以按照你说的方法来制造这把锁并且把想要保密的内容锁上,然后只有你自己有这把钥匙打开!钥匙一直掌握在你自己的手中,没有进行传播,不可能出现泄露。
你可能会想就是为什么制作锁的方式公布出去了之后,难道不能通过这个锁推断出钥匙是什么样子的吗?这就涉及数学中的陷门单向函数
例如 RSA 算法。生成密钥时,你选择两个非常大的素数作为私钥的一部分,然后将它们相乘得到一个更大的合数,这个合数就是公钥的一部分。乘法是容易的。但给定一个非常大的合数,想要找出它的两个原始素数因子(分解因数),在目前没有任何已知的快速算法,计算量会随着数字的增大呈指数级增长。
HTTPS中的 非对称加密+对称加密
HTTPS 中采用的加密算法是 非对称加密 + 对称加密 的混合加密方式。
-
在握手阶段 (Handshake Phase):
- 主要使用非对称加密。这是为了安全地协商和交换用于后续数据传输的对称密钥。因为非对称加密的公钥(锁的制作方法)是公开的,发送方可以用公钥加密一个密钥,只有拥有对应私钥的接收方能解密得到,这样发送方和接收方就都获得了对称加密算法中的私钥,并且这个私钥没有在网络中以明文的方式传播,所以黑客是获取不到对称加密的私钥的。
- 同时,非对称加密(通过数字签名)也用于验证服务器的身份(客户端使用 CA 的公钥验证服务器证书上的签名)。
- 主要使用非对称加密。这是为了安全地协商和交换用于后续数据传输的对称密钥。因为非对称加密的公钥(锁的制作方法)是公开的,发送方可以用公钥加密一个密钥,只有拥有对应私钥的接收方能解密得到,这样发送方和接收方就都获得了对称加密算法中的私钥,并且这个私钥没有在网络中以明文的方式传播,所以黑客是获取不到对称加密的私钥的。
-
在数据传输阶段 (Data Transfer Phase):
- 一旦握手完成,双方就使用在握手阶段协商和生成好的对称密钥来对实际传输的大量 HTTP 数据(请求头、体、响应头、体)进行对称加密。
为什么采用混合方式?
- 非对称加密虽然安全(密钥交换和身份验证),但计算开销大,速度慢,不适合用来加密大量的数据。
- 对称加密计算开销小,速度快,适合用来加密大量的数据,但它的问题在于如何安全地在通信双方之间共享密钥。
HTTPS 的混合加密正是解决了这个矛盾:利用非对称加密的安全性来解决对称密钥的共享问题(安全地交换对称密钥),然后利用对称加密的高效性来解决大量数据加密的问题。
HTTPS中建立连接的方式
HTTPS 连接的建立过程可以分解为两个主要步骤:
-
底层 TCP 连接建立 :
- 这是任何基于 TCP 的网络通信(包括 HTTP 和 HTTPS)都需要的第一步。
- 客户端和服务器之间进行经典的 TCP 三次握手 (Three-Way Handshake):
- 客户端 -> 服务器: SYN (同步序列号)
- 服务器 -> 客户端: SYN-ACK (同步序列号并确认)
- 客户端 -> 服务器: ACK (确认)
- 握手成功后,客户端和服务器之间就建立了一个可靠的、双向的 TCP 连接。
- TLS/SSL 安全连接建立
- 客户端向服务器索要并验证服务器的公钥(非对称加密)。
- 双⽅协商⽣产「会话秘钥」(对称加密)。
- 双⽅采⽤「会话秘钥」进⾏加密通信。
相关文章:
计算机网络八股——HTTP协议与HTTPS协议
目录 HTTP1.1简述与特性 1. 报文清晰易读 2. 灵活和易于扩展 3. ⽆状态 Cookie和Session 4. 明⽂传输、不安全 HTTP协议发展过程 HTTP/1.1的不足 HTTP/2.0 HTTP/3.0 HTTPS协议 HTTP协议和HTTPS协议的区别 HTTPS中的加密方式 HTTPS中建立连接的方式 前言ÿ…...
Unitest和pytest使用方法
unittest 是 Python 自带的单元测试框架,用于编写和运行可重复的测试用例。它的核心思想是通过断言(assertions)验证代码的行为是否符合预期。以下是 unittest 的基本使用方法: 1. 基本结构 1.1 创建测试类 继承 unittest.TestC…...
常用python爬虫框架介绍
文章目录 前言1. Scrapy2. BeautifulSoup 与 Requests 组合3. Selenium4. PySpider 前言 Python 有许多优秀的爬虫框架,每个框架都有其独特的特点和适用场景。以下为你详细介绍几个常用的 Python 爬虫框架: Python 3.13.2 安装教程(附安装包…...
AI大模型:(二)2.3 预训练自己的模型
目录 1.预训练原理 2.预训练范式 1.未标注数据 2.标注数据 3.有正确答案、也有错误答案 3.手撕transform模型 3.1.transform模型代码 3.2.训练数据集 3.3.预训练 3.4.推理 4.如何选择模型 5.如何确定模型需要哪种训练 大模型预训练(Large-scale Pre-training…...
webpack基础使用了解(入口、出口、插件、加载器、优化、别名、打包模式、环境变量、代码分割等)
目录 1、webpack简介2、简单示例3、入口(entry)和输出(output)4、自动生成html文件5、打包css代码6、优化(单独提取css代码)7、优化(压缩过程)8、打包less代码9、打包图片10、搭建开发环境(webpack-dev-server…...
数字后端设计 (四):时钟树综合——让芯片的「心跳」同步到每个角落
—— 试想全城的人要在同一秒按下开关——如果有的表快、有的表慢,结果会乱套!时钟树综合就是给芯片内部装一套精准的“广播对时系统”,让所有电路踩着同一个节拍工作。 1. 为什么时钟如此重要? 芯片的「心跳」:时钟信…...
微信小程序 van-dropdown-menu
点击其他按钮,关闭van-dropdown-menu下拉框 DropdownMenu 引入页面使用index.wxmlindex.scssindex.ts(重点)index.ts(全部) DropdownMenu 引入 在app.json或index.json中引入组件 "usingComponents": {"van-dropdown-menu": "vant/weapp…...
智驱未来:AI大模型重构数据治理新范式
第一章 数据治理的进化之路 1.1 传统数据治理的困境 在制造业巨头西门子的案例中,其全球200个工厂每天产生1.2PB工业数据,传统人工清洗需要300名工程师耗时72小时完成,错误率高达15%。数据孤岛问题导致供应链决策延迟平均达48小时。 1.2 A…...
2025-04-22| Docker: --privileged参数详解
在 Docker 中,--privileged 是一个运行容器时的标志,它赋予容器特权模式,大幅提升容器对宿主机资源的访问权限。以下是 --privileged 的作用和相关细节: 作用 完全访问宿主机的设备: 容器可以访问宿主机的所有设备&am…...
[创业之路-380]:企业法务 - 企业经营中,企业为什么会虚开増值税发票?哪些是虚开増值税发票的行为?示例?风险?
一、动机与风险 1、企业虚开增值税发票的动机 利益驱动 骗抵税款:通过虚开发票虚增进项税额,减少应纳税额,降低税负。公司套取国家的利益。非法套现:虚构交易开具发票,将资金从公司账户转移至个人账户,用…...
C++ 蓄水池抽样算法
(1)概念 蓄水池抽样算法(Reservoir Sampling)是一种用于从 大规模数据集(尤其是 流式数据 或 无法预先知晓数据总量 的场景)中 等概率随机抽取固定数量样本 的算法。 (2)实现 我们…...
uniapp-x 二维码生成
支持X,二维码生成,支持微信小程序,android,ios,网页 - DCloud 插件市场 免费的单纯用爱发电的...
蓝桥杯算法实战分享:C/C++ 题型解析与实战技巧
蓝桥杯全国软件和信息技术专业人才大赛,作为国内知名的算法竞赛之一,吸引了众多编程爱好者参与。在蓝桥杯的赛场上,C/C 因其高效性和灵活性,成为了众多选手的首选语言。本文将结合蓝桥杯的赛制特点、常见题型以及实战案例…...
分布式光纤测温技术让森林火灾预警快人一步
2025年春季,多地接连发生森林火灾,累计过火面积超 3万公顷。春季历来是森林草原火灾易发、多发期,加之清明节已到来,生产生活用火活跃,民俗祭祀用火集中,森林火灾风险进一步加大。森林防火,人人…...
Vue2 el-checkbox 虚拟滚动解决多选框全选卡顿问题 - 高性能处理大数据量选项列表
一、背景 在我们开发项目中,经常会遇到需要展示大量选项的多选框场景,比如权限配置、数据筛选等。当选项数量达到几百甚至上千条时,传统的渲染方式全选时会非常卡顿,导致性能问题。本篇文章,记录我使用通过虚拟滚动实现…...
KUKA机器人KR 3 D1200 HM介绍
KUKA KR 3 D1200 HM是一款小型机器人,型号中HM代表“Hygienic Machine(卫生机械)用于主副食品行业”,也是一款并联机器人。用于执行高速、高精度的抓取任务。这款机器人采用食品级不锈钢设计,额定负载为3公斤ÿ…...
linux驱动---视频播放采集架构介绍
lcd驱动框架(图像显示) 图像显示基础 1. 核心组件架构 用户空间 ------------------------------------------ | X11/Wayland | FBDEV应用 | DRM/KMS应用 | ------------------------------------------ 内核空间 --------------------------------…...
【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出)
【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出) 引言 本文使用状态空间模型实现失业率递归预测,状态空间模型(State Space Model, SSM)是一种用于描述动态系统行为的…...
状态管理最佳实践:Riverpod响应式编程
状态管理最佳实践:Riverpod响应式编程 引言 Riverpod是Flutter生态系统中一个强大的状态管理解决方案,它通过响应式编程的方式提供了更加灵活和可维护的状态管理机制。本文将深入探讨Riverpod的核心概念、实践应用以及性能优化技巧。 核心概念 Provi…...
【Linux】线程ID、线程管理、与线程互斥
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🌐 C 语言 上篇文章: 【Linux】线程:从原理到实战,全面掌握多线程编程!-CSDN博客 下…...
python包管理器,conda和uv 的区别
python包管理器,conda和uv 的区别 以下是 conda 和 uv 在 Python 包管理中的深度对比,结合知识库内容进行分析: 1. 核心设计理念 conda 以“环境为中心”,强调跨语言支持(如 Python、R、Julia)和严格的依赖…...
逻辑回归:损失和正则化技术的深入研究
逻辑回归:损失和正则化技术的深入研究 引言 逻辑回归是一种广泛应用于分类问题的统计模型,尤其在机器学习领域中占据着重要的地位。尽管其名称中包含"回归",但逻辑回归本质上是一种分类算法。它的核心思想是在线性回归的基础上添…...
【锂电池SOH估计】RF随机森林锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)
目录 效果一览程序获取程序内容代码分享研究内容基于随机森林(RF)的锂电池健康状态(SOH)估计算法研究摘要1. 引言2. 锂电池SOH评估框架3. 实验与结果分析4. 未来研究方向6. 结论效果一览 程序获取 获取方式一:文章顶部资源处直接下载:【锂电池SOH估计】RF随机森林锂电池…...
【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现
介绍 广义上讲,扩散模型是一种生成式深度学习模型,它通过学习到的去噪过程来创建数据。扩散模型有很多变体,其中最流行的通常是文本条件模型,它可以根据提示生成特定的图像。一些扩散模型(例如 Control-Net࿰…...
121.在 Vue3 中使用 OpenLayers 实现去掉鼠标右键默认菜单并显示 Feature 信息
🎯 实现效果 👇 本文最终实现的效果如下: ✅ 地图初始化时绘制一个多边形; ✅ 鼠标 右键点击地图任意位置; ✅ 若命中 Feature,则弹出该图形的详细信息; ✅ 移除浏览器默认的右键菜单,保留地图交互的完整控制。 💡 整个功能基于 Vue3 + OpenLayers 完成,采用 Com…...
仓颉造字,亦可造AI代理
CangjieMagic入门教程 本文将为您提供一份关于CangjieMagic代码库的详细入门教程,CangjieMagic托管于GitCode - 全球开发者的开源社区,开源代码托管平台。这是一个基于仓颉编程语言的LLM(大语言模型)Agent开发平台,具有独特的Age…...
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中,我们探讨了如何通过精心的特征工程,将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…...
【音视频】音频解码实战
音频解码过程 ⾳频解码过程如下图所示: FFmpeg流程 关键函数 关键函数说明: avcodec_find_decoder:根据指定的AVCodecID查找注册的解码器。av_parser_init:初始化AVCodecParserContext。avcodec_alloc_context3:为…...
DOCA介绍
本文分为两个部分: DOCA及BlueField介绍如何运行DOCA应用,这里以DNS_Filter为例子做大致介绍。 DOCA及BlueField介绍: 现代企业数据中心是软件定义的、完全可编程的基础设施,旨在服务于跨云、核心和边缘环境的高度分布式应用工作…...
# 利用迁移学习优化食物分类模型:基于ResNet18的实践
利用迁移学习优化食物分类模型:基于ResNet18的实践 在深度学习的众多应用中,图像分类一直是一个热门且具有挑战性的领域。随着研究的深入,我们发现利用预训练模型进行迁移学习是一种非常有效的策略,可以显著提高模型的性能&#…...
