34

昨天,我和同事讨论了 HTTP。有人问为什么HTTP是以纯文本方式设计的。当然,它可以像 TCP 协议一样以二进制方式设计,使用标志来表示不同类型的方法(POST、GET)和变量(HTTP 标头)。那么,为什么 HTTP 是这样设计的呢?是否有任何技术或历史原因?

4

10 回答 10

58

技术和历史的一个原因是文本协议在 Unix 世界中几乎总是首选。

好吧,这不是真正的原因,而是一种模式。这背后的基本原理是文本协议允许您通过转储所有经过的内容来查看网络上正在发生的事情。您不需要像 TCP/IP 那样需要专门的分析器。这使得调试和维护更容易。

不仅 HTTP,而且许多协议都是基于文本的(例如,FTP、POP3、SMTP、IMAP)。

你可能想看看The Art of Unix Programming以获得关于这个 Unix 东西的更详细的解释。

于 2008-12-26T02:41:42.083 回答
19

使用 HTTP,请求的内容几乎总是比协议开销大几个数量级。将协议转换为二进制协议将节省非常少的带宽,并且文本协议提供的易于调试性很容易胜过二进制协议的少量带宽节省。

于 2008-12-26T03:30:05.010 回答
9

许多 Internet 应用程序协议或多或少地使用纯文本协议(请参阅 FTP、POP、SMTP 等)。

它使互操作性和故障排除变得更加容易。

于 2008-12-26T02:39:33.350 回答
8

HTTP 代表“超文本传输​​协议”。

它最初被设计为一种服务文本文档的方式,因此是基于文本的协议。

我们现在对 HTTP 所做的事情远远超出了它的初衷。

于 2008-12-26T02:40:22.070 回答
5

HTTP 1.1 的 RFC 2616 第 3.7.1 节一样,命令或标题行的关键标识符是文本换行符 CRLF;基于文本的应用程序协议使纯粹与 Telnet 客户端进行对话(用于故障排除)变得更加容易。它还可以更轻松地使用 ReadLine() 调用和匹配文本字符串进行编程。

CRLF 参数中断还提供了近乎无限的任意头扩展,这与固定大小的 TCP 或 IP 头不同,后者通过位偏移进行硬编码。

于 2008-12-26T02:55:40.540 回答
3

所以更容易“读取”流量或创建客户端或服务器?

你可以争论它是否真的让事情变得更容易,但这肯定是意图。

于 2008-12-26T02:39:50.340 回答
3

在 http 的情况下,有些人使用它的“二进制”版本,他们称之为嵌入式二进制 HTTP (EBHTTP)

https://datatracker.ietf.org/doc/html/draft-tolle-core-ebhttp-00

于 2011-03-03T12:27:50.503 回答
1

从历史上看,这一切都始于 RFC822(ARPA 互联网文本消息格式标准),其最新版本是 RFC5322(互联网消息格式)。SMTP (RFC 821) 是基于 RFC822 的最流行的协议之一。而且,HTTP 诞生于 SMTP(您的邮件协议)。

于 2008-12-26T20:29:34.953 回答
1

我喜欢:

...在 Unix 世界中是首选。

原因,但它没有解释原因。

为了理解为什么您需要将自己置于想要制作可用产品的设计师的位置。

A)您可以用无意义的胡言乱语(二进制)记录狗屎。

B)开发或希望其他人开发工具,以有意义的方式描绘您的无意义的胡言乱语。

或者

A)您可以利用语言作为自记录协议的工具,从有意义的文本中记录狗屎。

B) 不需要额外的工具,额外的工具会更容易编写和调试。

它创建了分阶段交付,并创建了在进行未来开发时更容易理解和回忆的东西。它还创造了一种不再需要更高级别抽象的情况。

Imagine a world where setting a header value isn't as simple as dictionary/Map somewhere in your framework. When running into errors you'd have to constantly question whether or not your framework is correct or not, because you couldn't easily see it's doing the right thing without additional tools. That would be the world of HTTP if each framework needed to invent/implement it's own higher level abstraction (browsers come to mind).

Many protocol designer's want efficiency, this design focuses on usability, which is paramount in the software development industry. Unusable tools that are prematurely optimized create an unnecessary burden for software developers, and this burden manifests across the board.

于 2013-04-20T16:25:07.267 回答
0

Now,HTTP/2 based Binary,it is much less error-prone.

https://http2.github.io/faq/#why-is-http2-binary

于 2015-03-09T07:50:07.490 回答