HTTP Message Format - HTTP 报文格式
IETF 相关文档
RFC 7230 (opens in a new tab) 已经过时
RFC 9112 (opens in a new tab) 最新
HTTP 报文的格式分为四大块:
- 起始行(start-line)
- 头部属性行 (field-line)
- 空行 (empty line)
- 可选的消息体 (message-body)
HTTP-message = start-line CRLF
*( field-line CRLF )
CRLF
[ message-body ]
同时 HTTP 报文分为请求报文和响应报文,请求报文由客户端发送给服务器,响应报文由服务器发送给客户端。这两种报文通过起始行来区分:
- 请求报文:请求行(request-line)
- 响应报文:状态行(status-line)
start-line = request-line / status-line
start-line 起始行
requset-line 请求行
请求行由三部分组成:
- 方法(method)
- 请求目标(request-target)
- 协议版本(HTTP-version)
request-line = method SP request-target SP HTTP-version
例如下面其中的 GET / HTTP/1.1
分别表示请求方法为 GET
,请求目标为 /
,协议版本为 HTTP/1.1
。
GET / HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
status-line 状态行
状态行由三部分组成:
- 协议版本(HTTP-version)
- 状态码(status-code)
- 原因短语(reason-phrase)
status-line = HTTP-version SP status-code SP [ reason-phrase ]
例如下面其中的 HTTP/1.1 200 OK
分别表示协议版本为 HTTP/1.1
,状态码为 200
,原因短语为 OK
。
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
field-line 头部属性行
头部属性行由两部分组成:
- 头部字段名(field-name)
- 头部字段值(field-value)
field-line = field-name ":" OWS field-value OWS
例如下面其中的 Connection: keep-alive
分别表示头部字段名为 Connection
,头部字段值为 keep-alive
。
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
empty line 空行
空行表示 HTTP 报文头部属性行的结束,同时空行也是 HTTP 报文消息体的开始。
message-body 消息体
消息体是可选的,如果 HTTP 报文包含消息体,那么在空行之后就是消息体。
例如下面中的 Hello World!
就是消息体。
HTTP/1.1 200 OK
Date: Sun, 31 Dec 2023 19:53:19 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Content-Length: 12
Hello World!