昨天,我和我的同事们讨论了HTTP。有人问为什么HTTP要以纯文本方式设计。当然,它可以像TCP协议一样以二进制方式设计,使用标志来表示不同种类的方法(POST,GET)和变量(HTTP头)。那么,为什么HTTP以这种方式设计?是否存在任何技术或历史原因?
一个既有技术又有历史渊源的原因是,在Unix世界中,文本协议几乎总是首选。
实际上,这并不是一个理由,而是一种模式。其背后的原理是,文本协议允许您通过倾倒经过网络的所有内容来“看到”网络上正在发生的事情。您不需要像TCP/IP那样需要专门的分析工具。这使得调试和维护更加容易。
不仅HTTP,许多协议都是基于文本的(例如FTP、POP3、SMTP、IMAP)。
您可能想要查看《Unix编程艺术》以获得有关Unix的更详细解释。
HTTP代表“超文本传输协议”。
最初它被设计为一种提供文本文档的方式,因此是基于文本的协议。
现在我们使用HTTP的方式已经远远超出了其最初的意图。
那么,这样做是为了更容易“读取”流量或创建客户端或服务器?
你可以争论它是否实际上使它更容易,但肯定这是目的。
我喜欢:
...在Unix世界中更受欢迎。
原因,但它没有解释为什么。
为了理解为什么需要将自己置于想要制作可用产品的设计师的角度。
A)您可以记录无意义的胡言乱语(二进制)。
B)开发或希望其他人开发工具以有意义的方式描绘您的无意义的胡言乱语。
或者
A)您可以记录充满意义的文本,利用语言作为自我记录协议的工具。
B)没有立即需要额外的工具,并且编写和调试附加工具将更容易。
它创建了分阶段交付并创建了一些更易于理解和回忆的东西,以便进行未来的开发。 它还创造了一个不再需要更高级抽象的情况。
想象一个世界,设置头部值不像在你的框架中的字典/Map那样简单。当遇到错误时,你必须不断质疑你的框架是否正确,因为没有额外的工具,你无法轻松地看到它是否做得正确。如果每个框架都需要发明/实现自己的高级抽象(浏览器就是其中之一),那么这将是HTTP的世界。许多协议设计师都希望提高效率,但这种设计侧重于可用性,在软件开发行业中至关重要。过早优化的无用工具会为软件开发人员带来不必要的负担,并在各个方面表现出来。
从历史上看,一切都始于RFC822(ARPA互联网文本消息格式标准),其最新版本为RFC5322(互联网消息格式)。SMTP(RFC 821)是基于RFC822的最流行协议之一。而HTTP则源于SMTP(您的邮件协议)。