http - 读取与解析 HTTP 请求
问题描述
我正在阅读J. Ousterhout的《软件设计哲学》一书。在第 5 章中,他提到了以下练习:
然后,他讨论了解决该练习的常见错误:
“使用两个不同的类来接收 HTTP 请求;第一个类将来自网络连接的请求读入一个字符串,第二个类解析这个字符串。”</p>
“发生信息泄漏是因为如果不解析大量消息就无法读取 HTTP 请求;例如,Content-Length 标头指定了请求正文的长度,因此必须解析标头才能计算总请求长度。因此,这两个类都需要了解 HTTP 请求的大部分结构,并且解析代码在两个类中都是重复的。”</p>
我无法理解该示例,因为我对 http 请求一无所知。更准确地说,我不明白句子中reading
和的含义:parsing
“如果不解析大部分消息,就无法读取 HTTP 请求”
有什么帮助吗?
解决方案
读取意味着从某个外部源(如网络套接字)获取一堆字节并将它们存储在内存中。
解析意味着将该字节串分解为有意义的、特定于域的块,以便您可以理解消息。
我还没有读过那本书,但作者的观点是,你不能简单地先读取字节,然后在两个独立的非重叠操作中解析它们。HTTP 请求可以是任意大小,因此在您知道要读取多少字节(即,多少字节代表一个 HTTP 请求)之前,您必须弄清楚请求的长度。您可以通过阅读Content-Length
标题来做到这一点,这需要解析和理解消息。
推荐阅读
- c# - 如何在 C# 中使用 SQL 发送属性
- c# - 如何将缓慢平滑的对象移动为另一个对象的子对象?
- nginx - NGINX fastcgi 无法获取脚本名称
- multithreading - Julia:@async 和多个 CPU 内核/线程
- python - 如何在不使用定义的情况下使用海龟图形和嵌套循环创建棋盘?
- javascript - Firestore/Vuejs:无法从 Firestore 文档中删除
- php - 如何根据 Laravel 中的复选框选择插入多个数据
- c - 如何使用指针创建二维数组初始化函数?
- reactjs - 使用道具将链接/网站添加到按钮
- angular - 从路径更改页面时,Angular如何动态更改页面?