昨天,我与同事讨论了HTTP问题。有人问为什么HTTP是以纯文本方式设计的。当然,它可以像TCP协议一样以二进制方式设计,使用标志来表示不同类型的方法(POST,GET)和变量(HTTP标头)。那么,为什么HTTP是这样设计的呢?有任何技术或历史原因吗?
答案 0 :(得分:51)
理由技术和历史都是文本协议在Unix世界中几乎总是首选。
嗯,这不是一个理由,而是模式。这背后的基本原理是文本协议允许您通过转储所有通过的内容来查看网络上发生的事情。您不需要TCP / IP所需的专用分析器。这使得调试更容易,更易于维护。
不仅是HTTP,而且许多协议都是基于文本的(例如,FTP,POP3,SMTP,IMAP)。
您可能需要查看 Unix编程的艺术,以获得有关此Unix事物的更详细说明。
答案 1 :(得分:17)
使用HTTP,请求的内容几乎总是比协议开销大几个数量级。将协议转换为二进制协议可以节省很少的带宽,文本协议提供的简单可调试性轻松胜过二进制协议的小带宽节省。
答案 2 :(得分:8)
许多Internet应用程序协议使用或多或少的纯文本协议(请参阅FTP,POP,SMTP等)。
它使互操作性和故障排除变得更加容易。
答案 3 :(得分:6)
HTTP代表“超文本传输协议”。
它最初被设计为一种服务文本文档的方式,因此是基于文本的协议。
我们现在用HTTP做的事情远远超出了原来的意图。
答案 4 :(得分:4)
与RFC 2616 section 3.7.1 for HTTP 1.1一样,命令行或标题行的键标识符是文本换行符CRLF;基于文本的应用程序协议使得与纯粹的Telnet客户端进行对话(进行故障排除)变得更加容易。它还使用ReadLine()调用和匹配文本字符串进行编程变得更容易。
CRLF参数break还提供了几乎无限制的abitrary头扩展,这与固定大小的TCP或IP头不同,其中一个是按位偏移进行硬编码。
答案 5 :(得分:2)
因此,更容易“读取”流量或创建客户端或服务器?
你可以辩论实际是否更容易,但肯定是意图。
答案 6 :(得分:2)
在http的情况下,有些人使用它的“二进制”版本,他们称之为嵌入式二进制HTTP(EBHTTP)
答案 7 :(得分:1)
从历史上看,这一切都始于RFC822(ARPA互联网文本消息的格式标准),其最新版本是RFC5322(互联网消息格式)。 SMTP(RFC 821)是基于RFC822的最流行的协议之一。而且,HTTP诞生于SMTP(您的邮件协议)。
答案 8 :(得分:1)
我喜欢:
...在Unix世界中首选。
原因,但它没有解释为什么。
为了理解为什么你需要将自己置于想要制作有用产品的设计师的角度。
A)你可以用毫无意义的胡言乱语(二进制)来记录这个狗屎。
B)发展或希望其他人开发出能够以有意义的方式描绘你无意义的胡言乱语的工具。
或
A)您可以使用语言作为自我文档协议的工具来记录有意义的文本。
B)不需要额外的工具,其他工具也更容易编写和调试。
它创造了分阶段的交付,并创造了一些更容易理解的东西。回想起未来的发展。它还会创建一种不再需要更高级别抽象的情况。
想象一下,在框架中某处设置标头值并不像字典/地图那么简单。遇到错误时,您必须不断询问您的框架是否正确,因为如果没有其他工具,您无法轻易看到它正在做正确的事情。如果每个框架都需要发明/实现它自己的更高级抽象(浏览器会浮现在脑海中),那将是HTTP的世界。
许多协议设计师都希望提高效率,这种设计侧重于可用性,这在软件开发行业中至关重要。过早优化的不可用工具给软件开发人员带来了不必要的负担,这种负担全面体现。
答案 9 :(得分:0)
现在,基于HTTP / 2的Binary,它更不容易出错。