【发布时间】:2012-03-01 09:15:37
【问题描述】:
快速提问 - HTTP 响应的状态行是否有最大大小?
在 RFC 中我找不到这些信息,就像这样:
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
据此我可以假设:
- HTTP-Version 通常为 8 字节(例如
HTTP/1.1) - 状态码为 3 个字节
- 2 个空格 + CRLF 为 4 个字节
- Reason-Phrase -> 根据 RFC,最长的是
Requested range not satisfiable所以 31 字节
这将是 46 个字节的总和。
这个假设是正确的还是我遗漏了什么?
更新:
由于下面的答案,我只想说明一下我的问题:
我正在使用来自服务器的 TCP 消息解析某种日志文件。现在有一些我不关心的随机数据和一些我想阅读的 HTTP 消息。现在我得到的所有数据都解析为\r\n 以找到状态行。因为我需要假设我的标头被拆分为几个 TCP 包,所以我只是缓冲所有数据并解析它。
如果标题状态行没有最大大小,我需要缓冲所有数据,直到出现下一个\r\n。在最坏的情况下,这意味着我节省了千字节的随机数据,因为它可能(但很可能不会)是标题状态行的一部分。
或者,在这种情况下,是否更适合解析 HTTP 版本字符串而不是 CRLF?
【问题讨论】:
-
由于该行被换行符终止,理论上它可以是无限的。请求/响应标头中的所有其他行也是如此。
标签: c++ http http-status