【Linux】应用层协议http

📅 发布时间:2026/7/5 13:55:07 👁️ 浏览次数:
【Linux】应用层协议http
【Linux】应用层协议HTTP 详解HTTPHyperText Transfer Protocol是目前互联网上使用最广泛的应用层协议主要用于 Web 浏览器与 Web 服务器之间的数据通信。它运行在 TCP 之上属于应用层协议。下面从 Linux 视角把 HTTP 协议的核心知识点、常见实现、抓包观察、性能调优等内容做一个系统梳理。1. HTTP 协议版本对比2025–2026 视角版本发布年份连接方式头部压缩多路复用服务器推送二进制帧主流使用场景Linux 典型服务器支持情况HTTP/1.01996短连接无无无否几乎淘汰全部支持但基本没人用了HTTP/1.11997支持持久连接无无无否目前仍然占主流~40–60%Nginx/Apache/OpenLiteSpeed 全支持HTTP/22015长连接HPACK有有是大中型网站主流~50%Nginx 1.9.5、Apache 2.4.17HTTP/32022长连接QUICQPACK有有是增长最快2025年底约 35–45%Nginx 1.25 quiche、Caddy 2、EnvoyLinux 运维最常面对的现状2025–2026仍然有大量 HTTP/1.1 流量尤其内网、老系统、API前端 CDN 基本都开启了 HTTP/2头部大厂、视频、游戏、实时类业务大量迁移到 HTTP/3基于 UDP 的 QUIC2. HTTP/1.1 最核心的几个特性必须记住请求-响应模型一问一答持久连接Keep-AliveConnection: keep-alive默认开启管线化Pipelining支持在同一个 TCP 连接上连续发多个请求但响应必须按序返回实际使用率很低因为队头阻塞Host 头必传虚拟主机依赖常见方法GET / POST / HEAD / PUT / DELETE / PATCH / OPTIONS常见状态码200 OK301 永久重定向302 临时重定向304 Not Modified缓存命中400 Bad Request403 Forbidden404 Not Found429 Too Many Requests502 Bad Gateway504 Gateway Timeout3. 在 Linux 上观察 HTTP 流量的常用命令# 1. 最简单抓包看明文 HTTP/1.1sudotcpdump -i any -s0 -w - port80|tcpdump -r - -A|less# 2. 只看请求头 响应头过滤 Host 和 User-Agentsudotcpdump -i any -Atcp port 80 and (((ip[2:2] - ((ip[0]0xf)2)) - ((tcp[12]0xf0)2)) ! 0)# 3. 用 Wireshark 过滤图形化最推荐http.request or http.response# 4. 统计某个域名访问量需要先抓包保存为 pcaptshark -r capture.pcap -Yhttp.host contains\example.com\-T fields -e http.host|sort|uniq-c|sort-nr# 5. 实时查看 Nginx/Apache 的访问日志最常用tail-f /var/log/nginx/access.log|grep-EGET /api|POST /order# 6. 查看当前连接数HTTP/1.1 长连接特别有用ss -ant( dport :80 or dport :443 )|wc-l4. HTTP/2 HTTP/3 在 Linux 上的关键变化HTTP/2 特点Linux 运维关注点多路复用 → 一个 TCP 连接可以并发很多流头部压缩HPACK→ 显著减少重复头部的带宽服务器推送Server Push→ 可以主动推送 CSS/JS现在用得少了被 preload 取代Linux 表现连接数显著下降但单个连接的内存和 CPU 消耗略高HTTP/3QUIC关键点基于 UDP端口通常还是 4430-RTT 握手首次连接后可立即发数据内置 TLS 1.3 多路复用 连接迁移IP 变化不断连Linux 内核要求5.6 推荐开启 UDP GSO/GSR常用服务器Nginx quiche 库主流Caddy 2内置 HTTP/3最简单Envoy服务网格常用5. Linux 上常见的 HTTP 相关性能调优点项目建议设置Nginx 示例适用场景注意事项keepalive_timeout65s 或 15s长连接复用太长 → 占用 fd太短 → 增加握手开销keepalive_requests100–1000同上根据业务请求频率调整worker_connections1024–4096 / worker视内存高并发受系统 ulimit 和 /proc/sys/fs/file-max 限制sendfileon静态文件配合 tcp_nopush / tcp_nodelaytcp_nodelayon小包频繁交互API会增加包数量带宽敏感场景慎用gzip / brotlionbrotli 优先级更高文本内容压缩CPU 换带宽动态内容慎开http2listen 443 ssl http2;开启 HTTP/2需要 SSLlisten 443 quic reuseport;开启 HTTP/3Nginx 1.25低延迟场景需要内核支持 UDP GSO6. 抓包实战快速口诀最常用场景只看 HTTP 请求头tcp.port 80 http.request只看响应头tcp.port 80 http.response看 POST 的 bodyhttp.request.method POST http contains password看某个域名的全部流量http.host contains api.example.com看 404 错误http.response.code 404总结一句话在 Linux 上HTTP/1.1 仍然是理解和调试的基础HTTP/2 是当前主流HTTP/3 是性能和移动端趋势。运维最常做的事就是通过日志 / tcpdump / Wireshark 看明文 HTTP/1.1通过 Nginx/Envoy 日志 qlogQUIC 日志看 HTTP/2 和 HTTP/3通过连接数、慢请求、QPS、错误码来判断瓶颈有哪个具体方向你想深入HTTP/2 帧结构详解 Wireshark 实战HTTP/3 QUIC 握手过程图解Nginx 配置 HTTP/3 的完整步骤常见 502/504/超时 排查流程如何在 Linux 上压测 HTTP/1.1 vs HTTP/2 vs HTTP/3随时告诉我