Linux网络编程|HTTP协议详解(报文、请求方法、状态码)

一、HTTP协议基础概念

  1. 底层依赖:HTTP基于TCP,通信前先要完成TCP三次握手建立连接,通信结束执行四次挥手断开连接。

  2. 协议特性

  • 无状态:服务器不会记忆客户端历史请求,每一次HTTP请求相互独立;依靠Cookie/Session实现会话记忆。

  • 文本协议:报文全部使用ASCII字符串,肉眼可读,便于调试分析。

  1. HTTP工作完整流程

  2. 客户端发起TCP连接,三次握手;

  3. 客户端发送HTTP请求报文;

  4. 服务器解析请求,处理业务,返回HTTP响应报文;

  5. 根据Connection字段,选择保持连接或者直接断开TCP连接(四次挥手)。

HTTPS = HTTP + SSL/TLS加密,传输数据全部加密,防止抓包窃听,端口443。

二、HTTP请求报文(客户端→服务器)

HTTP请求报文由请求行、请求头、空行、请求体四部分组成,\r\n作为每行结束标记,空行用来分隔请求头和请求体。

完整GET请求报文示例

http

GET / HTTP/1.1\r\n

Host: news.sohu.com\r\n

UserAgent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8\r\n

AcceptLanguage: enUS,en;q=0.5\r\n

Connection: keepalive\r\n

\r\n

  1. 请求行:GET / HTTP/1.1

格式:请求方法 资源路径 HTTP版本

  • 请求方法:GET、POST、PUT、DELETE等;

  • 资源路径:/代表网站根目录;

  • HTTP版本:常用HTTP/1.1。

  1. 请求头(键值对),常用字段

|----------------|--------------------------|
| 头部字段 | 说明 |
| Host | 目标服务器域名 / IP,虚拟主机必需 |
| UserAgent | 客户端软件信息(浏览器 / 设备) |
| Accept | 客户端能够接收的数据类型 |
| AcceptLanguage | 支持的语言 |
| Connection | keepalive长连接;close处理完就断开 |
| ContentType | 请求体数据格式(POST 时使用) |

  1. 空行 \r\n\r\n:标记请求头结束。

  2. 请求体Body:POST/PUT使用,GET一般没有请求体,存放表单、JSON数据。

三、HTTP响应报文(服务器→客户端)

响应报文四部分:状态行、响应头、空行、响应体。

响应报文示例

http

HTTP/1.1 200 OK\r\n

Date: Wed, 02 Sep 2026 06:31:29 GMT\r\n

ContentType: text/html;charset=utf8\r\n

Server: openresty\r\n

Connection: keepalive\r\n

\r\n

<!DOCTYPE html<html lang=zhCN<head

...网页HTML内容...

  1. 状态行:HTTP/1.1 200 OK

格式:HTTP版本 状态码 状态描述

  1. 响应头:服务器返回的附加信息;

  2. 空行:分隔头部与响应体;

  3. 响应体Body:真正返回的数据,可以是HTML网页、JSON字符串、图片二进制数据。

四、HTTP常用请求方法

|------------|------------------------------------------------|
| 方法 | 作用 |
| GET | 向服务器获取资源;参数放在 URL 后面,一般不带请求体;可被缓存、书签收藏CSDN博... |
| POST | 提交数据给服务器;数据放在请求体,用于表单提交、上传、提交 JSON 接口 |
| PUT | 修改 / 更新服务器资源 |
| DELETE | 删除服务器资源 |

GET参数示例:

http://api.k780.com/?app=weather.today\&cityNm=西安\&appkey=10003\&format=json

?后面为参数,&分割多个键值对,服务器解析URL参数返回JSON天气数据。

五、HTTP状态码(3位数字,5大类)

  • 1xx 信息提示:请求已收到,继续处理,如100 Continue

  • 2xx 请求成功

  • 200 OK:请求一切正常,成功返回数据;

  • 202 Accepted:请求已经被接受处理。

  • 3xx 重定向:资源位置变化,需要客户端跳转;

  • 4xx 客户端错误:客户端请求有问题

  • 400 Bad Request 请求格式错误;

  • 404 Not Found 访问的资源不存在。

  • 5xx 服务器错误:服务器内部故障

  • 500 Internal Server Error服务器内部异常。

面试高频:200成功,404找不到资源,500服务器出错。

六 、补充回顾:TCP粘包对HTTP的影响

HTTP是应用层文本协议,天然解决粘包问题:HTTP报文头部自带长度信息,或者以\r\n\r\n空行作为报文结束标记。即使TCP底层把多段数据粘在一起,应用层按照HTTP协议规则分割报文,正确区分每一个独立HTTP请求/响应。

自定义二进制协议需要手动处理粘包,而标准HTTP协议已经帮我们处理好分包/粘包问题。

小结

  1. HTTP基于TCP;80端口HTTP,443端口HTTPS加密;协议特性:无状态、文本协议。

  2. 请求报文四部分:请求行、请求头、空行、请求体;响应报文:状态行、响应头、空行、响应体。

  3. GET获取资源(参数放URL),POST提交数据(参数放请求体)。

  4. 状态码五类:1xx提示,2xx成功,3xx重定向,4xx客户端错误,5xx服务器错误。

相关推荐
HideF12 小时前
Linux sudo
linux
FlightYe12 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎13 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
牛马鸡niumasi14 小时前
【Linux】C语言文件操作
linux
say_fall15 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii15 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
AI+程序员在路上15 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能
默|笙16 小时前
【Linux网络】传输层协议TCP(1)---TCP报文介绍
linux·网络·tcp/ip
相思难忘成疾16 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
用户41071920132516 小时前
用 systemd 从零做一个系统健康巡检服务:脚本、沙箱与磁盘满排查实战
linux·ubuntu