网络基础
HTTP
超文本传输协议。建立在 TCP 连接上的。
- 协议
- 传输。有请求方和响应方。
- 超文本
HTTP 无状态: 协议自身只有一个来回,来不及记录状态。
HTTP/1.0 与 HTTP/1.1
连接:http1.0 默认使用非持久连接,http1.1 默认使用持久连接,多个 http 请求可复用同一个 TCP 连接,用于避免使用非持久连接时每次都需要建立连接的时延。
请求资源:http 1.1 在请求头引入了 range ,可以部分返回,请求码是 206,节省带宽,也利于传输大文件。
缓存:增加缓存管理和控制。响应头添加 Cache-Control。
备注
Keep-Alive
HTTP 1.0 默认短连接,默认是在每次请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接。
HTTP1.1 默认长连接。数据传输完成了保持 TCP 连接不断开,等待在同域名下继续用这个通道传输数据。
特点:
- 较少的 CPU 和内存使用,同时打开的连接减少了。
- 请求和应答 HTTP 管线化,请求串行,有队头阻塞的问题。
- 减少了后续请求延迟。无需再次进行握手。
- 长时间 TCP 连接容易导致浪费系统资源。
短链接长连接
短链接:每次 http 请求都新建一个 TCP 连接,每次都经历三次握手四次挥手
长连接: http /1.1 的 Keep-Alive。多次请求和响应基于一条 TCP 连接,有一定保持时间。
HTTP/1.1 与 HTTP/2.0
HTTP/2.0
-
二进制协议。
-
多路复用。同一个 TCP 连接中,客户端和服务端都可发起多个请求,多个响应,不需要按照顺序处理,废弃管道。避免队头堵塞的问题。
http2 对于同一域名只需要创建一个连接,而不是像 http/1.1 那样创建 6~8 个连接,不需要进行域名分片了。
-
压缩头部,减少数据传输量。
-
允许服务器主动向客户端推送数据,用于服务器在客户端缓存中填充数据。
HTTP/2.0 下服务器主动推送的是静态资源,和 WebSocket 以及使用 SSE 等方式向客户端发送即时数据的推送是不同的。
nginx.conflocation = /index.html {
http2_push /css/style.css;
http2_push /img/avatar.jpg;
}
HTTP/3
放弃 TCP,转而使用基于 UDP 的 QUIC (快速 UDP 互联网连接)协议。
- 要求加密后才能建立连接
- 解决 TCP 丢包阻塞的问题
HTTPS
走在安全协议上的 http。
- http 协议信息是明文传输的,https 是具有安全性的 SSL 加密的传输协议,具有身份验证、信息加密、完整性校验等功能。
- http 默认端口是 80 ,https 默认端口是 443。