一、HTTP协议基础概念
-
底层依赖:HTTP基于TCP,通信前先要完成TCP三次握手建立连接,通信结束执行四次挥手断开连接。
-
协议特性
-
无状态:服务器不会记忆客户端历史请求,每一次HTTP请求相互独立;依靠Cookie/Session实现会话记忆。
-
文本协议:报文全部使用ASCII字符串,肉眼可读,便于调试分析。
-
HTTP工作完整流程
-
客户端发起TCP连接,三次握手;
-
客户端发送HTTP请求报文;
-
服务器解析请求,处理业务,返回HTTP响应报文;
-
根据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
- 请求行:GET / HTTP/1.1
格式:请求方法 资源路径 HTTP版本
-
请求方法:GET、POST、PUT、DELETE等;
-
资源路径:/代表网站根目录;
-
HTTP版本:常用HTTP/1.1。
- 请求头(键值对),常用字段
|----------------|--------------------------|
| 头部字段 | 说明 |
| Host | 目标服务器域名 / IP,虚拟主机必需 |
| UserAgent | 客户端软件信息(浏览器 / 设备) |
| Accept | 客户端能够接收的数据类型 |
| AcceptLanguage | 支持的语言 |
| Connection | keepalive长连接;close处理完就断开 |
| ContentType | 请求体数据格式(POST 时使用) |
-
空行 \r\n\r\n:标记请求头结束。
-
请求体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内容...
- 状态行:HTTP/1.1 200 OK
格式:HTTP版本 状态码 状态描述
-
响应头:服务器返回的附加信息;
-
空行:分隔头部与响应体;
-
响应体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协议已经帮我们处理好分包/粘包问题。
小结
-
HTTP基于TCP;80端口HTTP,443端口HTTPS加密;协议特性:无状态、文本协议。
-
请求报文四部分:请求行、请求头、空行、请求体;响应报文:状态行、响应头、空行、响应体。
-
GET获取资源(参数放URL),POST提交数据(参数放请求体)。
-
状态码五类:1xx提示,2xx成功,3xx重定向,4xx客户端错误,5xx服务器错误。