昨天,我与同事讨论了HTTP问题.有人问为什么HTTP是以纯文本方式设计的.当然,它可以像TCP协议一样以二进制方式设计,使用标志来表示不同类型的方法(POST,GET)和变量(HTTP标头).那么,为什么HTTP是这样设计的呢?有任何技术或历史原因吗?
技术和历史的一个原因是文本协议几乎总是在Unix世界中首选.
嗯,这不是一个理由,而是一种模式.这背后的基本原理是文本协议允许您通过转储所有经历的内容来查看网络上发生的事情.您不需要TCP/IP所需的专用分析器.这使得调试更容易,更易于维护.
不仅是HTTP,而且许多协议都是基于文本的(例如,FTP,POP3,SMTP,IMAP).
您可能需要查看Unix编程的艺术,以获得有关此Unix事物的更详细说明.
使用HTTP,请求的内容几乎总是比协议开销大几个数量级.将协议转换为二进制协议可以节省非常少的带宽,并且文本协议提供的简单可调试性很容易胜过二进制协议的小带宽节省.
许多Internet应用程序协议使用或多或少的纯文本协议(请参阅FTP,POP,SMTP等).
它使互操作性和故障排除变得更加容易.
HTTP代表"超文本传输协议".
它最初被设计为一种服务文本文档的方式,因此是基于文本的协议.
我们现在用HTTP做的事情远远超出了它的初衷.
与HTTP 1.1的RFC 2616第3.7.1节一样,命令或标题行的关键标识符是文本换行符CRLF;基于文本的应用程序协议使仅通过Telnet客户端进行对话(用于故障排除)变得更加容易。它还使使用ReadLine()调用和匹配的文本字符串进行编程变得更加容易。
CRLF参数中断还提供了几乎无限的任意头扩展名,这与固定大小的TCP或IP头不同,后者通过位偏移来对一个硬代码进行编码。