HTTP请求的最小大小(字节)

eld*_*jon 13 html size byte http web

HTTP请求的最小字节数是多少?我的意思是HTTP请求应包含的强制数据的大小,例如标头的相关字段,并考虑到请求的主体是空的.

Men*_*hem 8

尽可能短的HTTP请求是一种简单的GET方法,通过直接连接到特定服务器来实现.最短的要求是:

GET / HTTP/0.9<CR><LF>
Run Code Online (Sandbox Code Playgroud)

这是总共16个字节,包括行尾的CR/LF对.

对于HTTP 1.x(1.0和1.1),预期会出现标题,因此要表示标题的结尾,您需要一个空行.最短的请求是:

GET / HTTP/1.0<CR><LF>
<CR><LF>
Run Code Online (Sandbox Code Playgroud)

这总共是18个字节.

(在Doug的评论之后添加;感谢:)对于HTTP 1.1,Host:标头是必需的.请参阅@ DougRichardson的答案,了解尽可能短的HTTP 1.1请求.

  • 此外,对于 HTTP 1.1,当使用请求 URI 的绝对路径时,Host 标头是必需字段。请参阅 RFC 2616 第 5.1.2 节,因此 18 字节的示例(至少对于 HTTP 1.1)不是有效的 HTTP 1.1。 (2认同)

Dou*_*son 6

26个字节,用于1字节资源和1字节主机名的例外情况.

GET / HTTP/1.1<CR><LF>
Host:x<CR><LF>
<CR><LF>
Run Code Online (Sandbox Code Playgroud)

您需要一个初始请求行,如果您使用的是HTTP 1.1,则需要一个主机头.每个换行符都是两个字节(CRLF).这个最小GET请求的两部分是可变的:资源路径和主机名.

最小初始请求行是GET / HTTP/1.116个字节(包括您看不到的两个不可见的CRLF字节).

最小主机线是Host:x,即一个字节的主机名,它产生8个字节(同样是两个CRLF字节).

要表示标题的结尾,您需要另一个CRLF,这是另外2个字节.

16+8+2=26 bytes 用于最小HTTP请求大小.

当然,如果您有更长的主机名或更长的资源路径,这会增加.要考虑这些因素,最小HTTP请求大小为:24 + length(resource_path) + length(host)

这是一个使用bash netcat的真实示例(注意资源路径和主机名都比最小值长):

nc -c www.example.com 80 <<EOF
GET /index.html HTTP/1.1
Host:www.example.com

EOF
Run Code Online (Sandbox Code Playgroud)

  • @MrMesees 这是一个额外的 40 个字节(对于 IPv4),但由于 HTTP 可以在 TCP/IPv4 或 TCP/IPv6 上运行,因此整个情况更加复杂。此外,如果使用 TLS,则会产生额外的开销。IP 下还有网络层,它们也有自己的开销。 (2认同)