HTTP 请求报文的结构:
请求行 (Request Line)
请求头部 (Headers)
空行 (CRLF)
请求数据 (Body)
1. 请求行 (Request Line)
请求行用于指定请求的 方法、目标 URL 及 HTTP 版本:
<请求方法> <请求的资源路径> <HTTP版本>
例如:
GET /search?q=chatgpt HTTP/1.1
请求行解析
组件 | 作用 |
---|---|
GET | 请求方法(常见的有 GET 、POST 、PUT 、DELETE 等) |
/search?q=chatgpt | 目标资源路径(可能包含查询参数) |
HTTP/1.1 | 使用的 HTTP 版本(通常为 HTTP/1.1 或 HTTP/2 ) |
2. 请求头部 (Headers)
请求头包含了客户端(浏览器、curl
、HTTP 库等)提供的额外信息,例如:
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: SESSIONID=abc123
常见的请求头
头字段 | 作用 |
---|---|
Host | 目标服务器域名(HTTP 1.1 必须包含) |
User-Agent | 客户端信息(浏览器、爬虫、curl 等) |
Accept | 期望的响应格式,例如 text/html 、application/json |
Accept-Encoding | 支持的压缩方式,如 gzip 或 deflate |
Accept-Language | 语言偏好,例如 zh-CN, en-US |
Cookie | 发送给服务器的 Cookie(保持登录状态等) |
Connection | keep-alive (保持长连接)或 close (关闭连接) |
3. 空行 (CRLF)
请求头部结束后,必须有一个 空行(即 \r\n
),表示请求头部结束,接下来的内容是请求体。
4. 请求数据 (Body)
- GET 请求 通常 没有请求体,数据通过 URL 查询参数传递:
-
GET /search?q=chatgpt HTTP/1.1
POST/PUT 请求 可能包含请求体,例如:
-
POST /login HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: 29 username=admin&password=12345
这里的
username=admin&password=12345
就是请求数据。 -
完整 HTTP 请求示例
-
GET /search?q=chatgpt HTTP/1.1 Host: www.google.com User-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Cookie: PREF=ID=abc123
注意:最后的 空行 很重要,它表示请求头部结束!
-
总结
部分 作用 请求行 指定 HTTP 方法、URL 和版本 请求头部 额外的客户端信息,如 User-Agent
、Accept
、Cookie
空行 分隔请求头部和请求体 请求数据 仅 POST
、PUT
等请求包含,GET
请求通常没有