HTTP 协议解析

发布时间:2026/7/31 16:04:30
HTTP 协议解析 新人博客已发布文章会持续更新有短缺请见谅会尽快补齐欢迎评论区提出谢谢1. HTTP 协议概述HTTPHyperText Transfer Protocol超文本传输协议是互联网上应用最广泛的协议之一用于在客户端和服务器之间传输数据。它基于 TCP 协议采用请求-响应模型具有无状态、可扩展等特点。当前主流版本为 HTTP/1.1 和 HTTP/2HTTP/3 也在逐步推广中。理解 HTTP 协议的报文结构和解析原理对于 Web 开发、网络调试以及编写中间件具有重要的实战价值。本文将系统介绍 HTTP 请求与响应报文的格式并通过代码示例演示如何手动解析 HTTP 报文。2. HTTP 请求报文结构HTTP 请求报文由四个部分组成请求行、请求头、空行和请求体。典型的请求报文格式如下POST /api/login HTTP/1.1 Host: www.example.com Content-Type: application/json Content-Length: 45 {username:admin,password:123456}2.1 请求行请求行包含三个字段请求方法、请求 URI和HTTP 版本以空格分隔以CRLF\r\n结尾。常见请求方法包括 GET、POST、PUT、DELETE、HEAD、OPTIONS 等。2.2 请求头请求头由多个键值对组成每行一个格式为字段名: 字段值。常见的请求头字段有Host指定请求的目标主机和端口号。Content-Type说明请求体的媒体类型如application/json、application/x-www-form-urlencoded。Content-Length请求体的字节长度用于服务器确定请求体读取的边界。Connection控制连接状态如keep-alive表示复用连接。User-Agent标识客户端软件信息。Cookie携带客户端的会话信息。2.3 空行请求头和请求体之间必须有一个空行即单独的\r\n用于标识头部结束、请求体开始。解析器通过这个空行来切分头部和请求体。2.4 请求体请求体包含提交给服务器的数据。并非所有请求都有请求体GET 和 HEAD 请求通常没有请求体。请求体的长度由Content-Length头或者分块传输编码Transfer-Encoding: chunked来决定。3. HTTP 响应报文结构HTTP 响应报文同样由四个部分组成状态行、响应头、空行和响应体。典型响应报文格式如下HTTP/1.1 200 OK Content-Type: text/html; charsetutf-8 Content-Length: 138 !DOCTYPE html html headtitleExample/title/head bodyh1Hello World/h1/body /html3.1 状态行状态行包含三个字段HTTP 版本、状态码和原因短语。常见状态码有1xx信息性、2xx成功、3xx重定向、4xx客户端错误、5xx服务器错误。3.2 响应头响应头的格式与请求头相同常见字段包括Content-Type响应体的媒体类型如text/html、application/json。Content-Length响应体的字节长度。Set-Cookie服务器向客户端设置 Cookie。Location重定向的目标 URI配合 301/302 状态码使用。3.3 响应体响应体是服务器返回的实际数据可以是 HTML 文档、JSON 数据、图片等任意内容。其长度同样由Content-Length或分块编码决定。