首页 > 解决方案 > 读取与解析 HTTP 请求

问题描述

我正在阅读J. Ousterhout的《软件设计哲学》一书。在第 5 章中,他提到了以下练习:

“实现一个或多个类,使 Web 服务器更容易接收传入的 HTTP 请求并发送响应。” 在此处输入图像描述

然后,他讨论了解决该练习的常见错误:

“使用两个不同的类来接收 HTTP 请求;第一个类将来自网络连接的请求读入一个字符串,第二个类解析这个字符串。”</p>

“发生信息泄漏是因为如果不解析大量消息就无法读取 HTTP 请求;例如,Content-Length 标头指定了请求正文的长度,因此必须解析标头才能计算总请求长度。因此,这两个类都需要了解 HTTP 请求的大部分结构,并且解析代码在两个类中都是重复的。”</p>

我无法理解该示例,因为我对 http 请求一无所知。更准确地说,我不明白句子中reading和的含义:parsing

“如果不解析大部分消息,就无法读取 HTTP 请求”

有什么帮助吗?

标签: httpoopserver

解决方案


读取意味着从某个外部源(如网络套接字)获取一堆字节并将它们存储在内存中。

解析意味着将该字节串分解为有意义的、特定于域的块,以便您可以理解消息。

我还没有读过那本书,但作者的观点是,你不能简单地先读取字节,然后在两个独立的非重叠操作中解析它们。HTTP 请求可以是任意大小,因此在您知道要读取多少字节(即,多少字节代表一个 HTTP 请求)之前,您必须弄清楚请求的长度。您可以通过阅读Content-Length标题来做到这一点,这需要解析和理解消息。


推荐阅读