<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>应用层 on Tequila's 学习笔记</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/</link><description>Recent content in 应用层 on Tequila's 学习笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>© 2026 Tequila</copyright><atom:link href="https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/index.xml" rel="self" type="application/rss+xml"/><item><title>0 应用层idnex</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-cc90404ae036ec32/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-cc90404ae036ec32/</guid><description> HTTP/1.1 # 特性
无状态：cookie 明文传输 性能：
持久连接：不需要重复TCP握手 Pipeline：一次进行多个请求，必须按照发送的顺序接受 队头阻塞 HTTPS # 混合加密：非对称加密，加密对称密钥；对称密钥加密正文 摘要+签名：私钥加密正文哈希 数字证书：CA用私钥加密服务器公钥并签发数字证书
TLS 握手协议
ClientHello：TLS版本，随机数，算法套件列表 ServerHello：TLS版本，随机数，算法套件列表，数字证书 客户端回应：第三个随机数（pre-master key）,之前内容摘要 服务器回应：摘要 TLS1.2：2RTT，TLS1.3：1RTT 记录协议
分割片段并压缩 加上消息认证码（MAC） 使用对称密码进行加密 加上报头：数据类型，版本号，长度 HTTP/2 # 头部压缩：HPACK算法 二进制格式：头信息帧，数据帧 并发传输：流编号，一个TCP多个Stream，一个Stream多个message，一个Meaage多个帧 服务器主动推送 TCP队头阻塞 HTTP/3（QUIC） # 无队头阻塞 更快的建立连接 连接迁移：没有使用TCP四元组，使用了连接ID #</description></item><item><title>1 HTTP</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-a649838b9c059d27/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-a649838b9c059d27/</guid><description> HTTP/1.1优化 # 1. 避免HTTP请求 # 缓存 # 强制缓存 # Cache-Control Expires
协商缓存 # 第二次请求，服务器返回304 响应头中 Last-Modified 请求头中 If-Modified-Since
ETag If-None-Match
减少请求次数 # 减少重定向请求次数：重定向的任务交给代理服务器 和并请求：小图片合成大图片，webpack合并打包js，图片base64嵌入html 按需请求 减少响应大小 # 无损压缩 有损压缩</description></item><item><title>2 HTTPS</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-91942f3c660dd239/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-91942f3c660dd239/</guid><description>HTTPS RSA # 四次握手
Client Hello：TLS版本号，随机数，支持的密码套件列表 Server阶段 Server Hello：TLS版本，随机数2，选择的密码套件 Server Certificate：证书 Server Hello Done Client阶段 Client Key Exchange：生成一个随机数（pre-master），用服务器公钥加密 Change Cipher Spec：使用加密方式发送消息 Finished：前面握手的摘要 Change Cipher Spec：使用加密方式发送消息 Finished：前面握手的摘要 数字证书
证书签名过程： 公钥，用途，颁发者，有效时间，进行HASH 使用CA私钥对HASH进行签名 合并签名和信息 客户端校验证书： 对信息HASH 使用CA公钥对签名进行解密 对比 HTTPS ECDHE # DH算法：离散对数 DHE算法：临时生成离散对数，保证前向安全 ECDHE算法：椭圆曲线
握手过程
第一次握手 Client Hello：TLS版本，客户端随机数，密码套件 第二次握手 Server Hello：TLS版本，客户端随机数，密码套件 Server Certificate：证书 Server Key Exchange：交换公钥，用RSA签名 Server Hello Done 第三次握手 Client Key Exchange Change Cipher Spec：使用加密方式发送消息 Finished：前面握手的摘要 Change Cipher Spec：使用加密方式发送消息 Finished：前面握手的摘要 HTTPS 优化 # 协议优化 # 密钥交换算法优化 使用ECDHE：2RTT-&amp;gt;1RTT 选择x25519曲线 AES_128_GCM TLS升级：TLS1.</description></item><item><title>3 HTTP2</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-a2775aabb9038e8f/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-a2775aabb9038e8f/</guid><description>解决HTTP1.1问题，请求响应模型，头部巨大且重复，并发连接耗时，服务器不能主动推送。
兼容HTTP1.1
没有引入新的协议名 语法语义保持不变 头部压缩：HPACK算法
动态字典：不在静态表中，从62开始添加到表中，只需要一个index。 静态字典：分为index和header value，若没有value，就是用index+length+huffman编码的value 哈夫曼编码 二进制帧：
帧头： 帧长 帧类型：数据帧，控制帧 标志位 流标识符 帧数据：HPACK压缩的HTTP头部和包体 并发传输 多个Stream复用一条TCP连接，达到并发的效果 不同Stream的帧可以乱序发送，统一Stream的帧严格有序
服务器主动推送资源</description></item><item><title>4 HTTP3</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-dc5221a87dcf232f/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-dc5221a87dcf232f/</guid><description>无队头阻塞：多个Stream独立 更快的连接建立：TLS不分层 连接迁移：使用连接ID QPACK 解决HPACK队头阻塞的问题：若首包丢失，则不能建立动态表， 使用两个单项流，同步动态表</description></item><item><title>5 RPC</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-70293226995e1294/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-70293226995e1294/</guid><description>远程过程调用 HTTP主要用于B/S架构，RPC主要用于C/S架构， 性能 HTTP1.1 &amp;lt; RPC &amp;lt; HTTP2</description></item><item><title>6 WebSocket</title><link>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-c096d75c49e81e14/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://latnx.github.io/docs/notes/d-205f3859abe469be/d-714a093a918862cb/d-397002d1292f9ba2/n-c096d75c49e81e14/</guid><description>怎么才能在用户不做操作的情况下，网页能收到消息，并发生改变
HTTP轮询 # 通过前端代码不断发送HTTP请求到服务器：微信登陆
长轮询 # 将HTTP请求的超时设置的很大，超时后再发送下一次请求：百度网盘
WebSocket # 客户端
Connection: Upgrade Upgrade: WebSocket Sec-WebSocket-Key: T2a6wZlAwhgQNqruZ2YUyg==\r\n 服务器
HTTP/1.1 101 Switching Protocols\r\n Sec-WebSocket-Accept: iBJKv/ALIW2DobfoA4dmr3JHBCY=\r\n Upgrade: WebSocket\r\n Connection: Upgrade\r\n opcode：1:string, 2:[]byte, 8:关闭 payload长度：0-125 用7bit，126用7+16bit，127用7+64bit 使用场景：客户端和服务器需要频繁交互的场景，全双工</description></item></channel></rss>