云计算百科
云计算领域专业知识百科平台

HTTP 协议解析

新人博客,已发布文章会持续更新,有短缺请见谅,会尽快补齐,欢迎评论区提出,谢谢

1. HTTP 协议概述

HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的协议之一,用于在客户端和服务器之间传输数据。它基于 TCP 协议,采用请求-响应模型,具有无状态、可扩展等特点。当前主流版本为 HTTP/1.1 和 HTTP/2,HTTP/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; charset=utf-8
Content-Length: 138

<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body><h1>Hello World</h1></body>
</html>

3.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 或分块编码决定。

赞(0)
未经允许不得转载:网硕互联帮助中心 » HTTP 协议解析
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!