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服务器错误。

相关推荐
啊阿狸不会拉杆1 小时前
《计算机网络-自顶向下方法》2.5 P2P 文件分发 读书笔记
计算机网络·wireshark·asp.net·p2p
Brilliantwxx2 小时前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络
欧米欧3 小时前
Linux基础指令上
linux·运维·服务器
ARM|X86+FPGA工业主板厂家4 小时前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人
sulikey4 小时前
Linux 粘滞位(Sticky Bit)完全指南:为什么共享目录需要“防删除“?
linux·服务器
mengge.cloud4 小时前
网络技术基础小白教程
linux·服务器·网络·云计算
学代码的CJY5 小时前
Linux 重定向、管道与环境变量
linux·spring boot·spring
treacle田5 小时前
达梦数据库-Linux DM数据守护主备集群缩改为单机-记录总结
linux·服务器·数据库·主备集群改单机
IT大白鼠6 小时前
CentOS 7.9 自建 Yum 源服务器搭建指南
linux·服务器·centos