1. HTTP协议
超文本传输协议
请求/响应报文
请求报文
- 方法 // get/post..
- URL // 地址
- 协议版本 // 1.0.0
- CRLF
- 首部字段名: 值 //
"Content-Type": "application/json; charset=utf-8"
- 实体主体 // body(post)
响应报文
- 版本
- 状态码
- 短语
- CRLF
- 首部字段名: 值 //
- 实体主体
HTTP请求方式
GET
POST
HEAD
PUT
DELETE
OPTIONS
GET和POST方式的区别
1 | GET请求参数以?分割拼接到URL后面, POST请求参数在Body里面 |
从语义层区别
1 | GET: 获取资源. 安全的 幂等的 可缓存的 |
状态码
1xx
2xx
(200)响应成功3xx
(301/302)网络重定向4xx
(401/404)客户端问题5xx
(501/502)服务端问题
连接建立流程
三次握手
Client
->SYN
>>Server
Client
<<SYN, ACK
<-Server
Client
->ACK
>>Server

四次挥手
- -> FIN
- ACK <-
/// 半关闭状态 (客户端到Server端) - FIN, ACK <- // 2到3需要等待server处理完
- -> ACK

两个方向的FIN(断开)确认. 表示了tcp是全双工的连接通道
HTTP的特点
无连接
: HTTP的持久连接无状态
:Cookie/Session
持久连接
打开tcp通道,一定时间内,多个http请求在同一个通道请求和响应, 之后才关闭tcp连接通道
提升网络请求效率, 节省tcp多次建立连接的时间
头部字段
Connection
:keep-alive
// 客户端期许, 连接方式time
: 20 // 持久连接有效时间, 20smax
: 10 // 最多可发生多少个请求 10个
怎么判断一个请求是否结束
Content-length
: 1024chunked
, 最后会有一个空的chunked
Charies抓包原理
1 | 中间人攻击 (代理服务器 可以篡改客户端和服务端之间收发的数据) |
2. HTPPS与网络安全
HTTPS = HTTP + SSL/TLS
协议栈
1 | HTTP | SSL/TLS: 应用层 |
建立连接

会话秘钥 = random S + random C + 预主秘钥
HTTPS使用的加密手段?
- 连接建立过程使用
非对称加密
, 非对称加密很耗时
的 - 后续通信过程使用
对称加密
非对称加密
- 发送方通过
公钥
加密要发送的数据, - 接收方使用
私钥
解密发送方的数据
对称加密
- 发送方和接收方使用同一秘钥进行加密和解密操作
- 安全性比非对称加密低, 但是耗时比非对称少
3. TCP/UDP
TCP
: 传输控制协议UDP
: 用户数据报协议
UDP特点
- 无连接
- 尽最大努力交互
- 面向报文 (既不合并, 也不拆分) ‘完整数据包传输’
UDP功能
- 复用, 分用 (多端口复用传输层数据报; 数据报带有源端口信息可以进行分发)
- 差错检测 (IM数据模型借鉴)
TCP特点
- 面向连接 (三次握手, 四次挥手)
- 可靠传输
- 面向字节流
- 流量控制
- 拥塞控制
面向连接
1 | // 为什么是三次握手? |
可靠传输
无差错
不丢失
不重复
按序到达
1 | // 停止等待协议 |
面向字节流
发送方 -> [发送缓冲区] -> TCP连接通道 -> [接收缓冲区] -> 接收方
1 | 区别于UDP的面向报文, TCP在发送/接收方的`缓冲区`内部会由TCP控制进行数据包的拼接或者拆分操作 |
流量控制
1 | // 滑动窗口协议 |


拥塞控制
慢开始 拥塞避免
, 快恢复, 快重传
1 | 慢开始: 指数规律增长 |

4. DNS解析
1 | 域名到IP地址的映射, DNS解析请求采用UDP数据报, 且明文 |
DNS解析方式
1 | 1. 递归查询 // 客户端 -> 本地DNS -> 根域DNS -> 顶级DNS -> 权限DNS (查到即刻返回) |
DNS劫持
1 | 客户端向DNS服务器发出域名解析请求时, 被钓鱼DNS服务器劫持并篡改,然后返回错误的IP到客户端 |

1 | DNS劫持与HTTP的关系是怎么样的? |
DNS解析转发

怎么解决DNS劫持
httpDNS
长连接
1 | // httpDNS |
1 | // 长连接 |
5. Session/Cookie
HTTP协议无状态特点的补偿
Cookie
1 | Cookie主要用来记录用户状态, 区分用户, `状态保存在客户端` |
怎么修改Cookie
?
- 新
cookie
覆盖旧cookie
- 覆盖规则:
name, path, domain
等需要和原cookie
一致.
怎么删除Cookie
?
- 新
cookie
覆盖旧cookie - 覆盖规则:
name, path, domain
等需要和原cookie
一致. - 设置
cookie
的expires=过去的一个时间点, 或者maxAge=0
怎么保证Cookie
安全?
- 对Cookie进行加密处理
- 只在https上携带cookie
- 设置Cookie为httpOnly, 防止跨站脚本攻击.
Session
1 | Session主要用来记录用户状态, 区分用户, `状态保存在服务器端` |
Session
和Cookie
的关系
- Session需要依赖于Cookie机制
Session的工作流程

总结
HTTP中GET和POST方式区别?
从语义层面回答
HTTPS连接建立流程
见前文图片
TCP和UDP区别
特点, 功能方面
简述TCP的慢开始过程
拥塞控制
避免DNS劫持
httpdns
长连接
- 本文作者: 醉疏狂
- 本文链接: https://hubin97.github.io/2020/05/20/网络/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!