百科问答小站 logo
百科问答小站 font logo



为什么在 HTTP 协议中,使用的是 Windows 换行方式而不是 UNIX 换行方式? 第1页

  

user avatar   peng-an-dr-quest 网友的相关建议: 
      

此问题再一次证明了中国需要开一家古董电脑博物馆进行科普,不然年轻人将被半吊子“互联网”所鼓吹的“优雅”所蒙蔽,而视规范为“怪异冗长”。

下面是一台电传打字机,在PC机出现的主机时代,是最常见的人机界面,请看P键旁边的两个键,第一个键叫【LINE FEED】即LF,作用是将打印纸向上推动一行,第二个键叫【RETURN】,即Carriage return,简称CR,Carriage是指打印头小车,有些时候这个词也被写作Cartridge Return,即喷墨打印机里的墨盒Cartridge(跟我学绕口令:Print cartridge carriage is stalled),Carriage return翻译过来就是“小车回位”(将打印头小车推回行首),即“回车”。

如果要在电传打字机上完成现代电脑上“回车”的功能,需要按两下,一下【RETURN】一下【LINE FEED】,当然反过来理论上功能一样,而在电脑厂商的实施上更是随心所欲,任性如IBM就是用NL(NEXT LINE - 0x15)来做换行符。

正如 @贾物体 所说,在RFC158出现将命令统一为CR+LF,但很多厂商由于历史原因仍然不遵守,任性如苹果就在Mac OS X之前一直使用CR做换行符。

另外我们可以八卦一下为什么微软和大多数互联网标准用CRLF做换行符,1968年,13岁的比尔盖茨和15岁的保罗艾伦。他们当时使用的,就是上面那种Teletype Model 33电传打字机。

而他们使用的电脑主机并不在上面的照片里,根据历史资料,他们的学校当时有一台PDP-10,大概就是下面这个样子。(桌上的DEC Pack:快看我快看我,我是硬盘,还是移动硬盘哦!)

PDP是Digital Equipment Corporation,也就是Digital(DEC)公司的小型机系列,当时PDP系列小型机在商用和教育市场占有统治地位,它使用的TOPS-10系统就是使用CRLF作为【回车】的(Digital:怪我咯)。比尔盖茨学会BASIC语言的第二年,也就是1969年, 肯·汤普逊和丹尼斯·里奇两位大神才开始(在PDP-11上)开发Unix操作系统(PDP天天见),但Unix使用LF也不是两位大神拍脑袋的结论,而是沿用了MIT,通用电气和贝尔实验室联合开发的Multics的设计。同样是在1969年, ARPANET开始建设。

1971年,上面提到的RFC158标准确立,同年,贝尔实验室向外界公开了Unix,(Unix:对不起我来晚了)。

1972年,C语言被用来重写Unix

1975年微软成立,同年出现了RFC681标准,即Network Unix ,此时的Unix“展现了作为APRANET小型主机时的一些有趣功能”(present several interesting capabilities as an ARPANET mini-host)。

1977年的一张APRANET逻辑图,Digital的PDP小型机占据了统治地位,在1970年代,大多数的Internet相关的协议都已经诞生,包括电子邮件和FTP协议。这些协议都是用CRLF作为换行符。

当年的保罗艾伦是PDP电脑的大粉丝,1975年1月他和比尔盖茨在《大众电子》上看到Altair 8800,然后就着手把BASIC移植到这台新的微电脑上面去,然后保罗艾伦就把之前写的PDP-10平台Intel 8008模拟器和宏汇编工具拿出来一通魔改,两人就在哈弗大学的一台PDP-10上做出了Altair BASIC,成为了微软的第一款产品。后来Altair BASIC就成了Microsoft BASIC,再后来成了Visual Basic延续至今。

所以,这冗长而诡异的CRLF,还要归罪于Digital。(Digital:怪我咯,没有我你们别说互联网,连DOS都用不上~)

更多电脑情怀话题,请关注:古董电脑室

推荐阅读:美丽却被遗忘的UNIX硬件


user avatar   Ivony 网友的相关建议: 
      

其实本质上是微软丢失了话语权,所以才搞成了Windows风格/Unix风格/Mac风格。


准确的说应该是传统风格/简洁风格/沙雕风格……

Windows是兼容简洁风格的。


user avatar   be5invis 网友的相关建议: 
      

CRLF 才是正统啊,当时的打印机用的就是 CRLF

在 ASCII 的设计里,CR 表示把打印头移动到行首,LF 表示把打印头向下移动一行,两者联用才是「换行」的效果(CR 在前是因为打印头移动到行首时间比较长,所以放在前面)。

Multics 使用驱动来隔离设备区别,于是就单用一个 LF 了。


user avatar   minmin.gong 网友的相关建议: 
      

正解在这里:Why is the line terminator CR+LF?

使用CR+LF的有RFC 0821 (SMTP)、RFC 1939 (POP)、RFC 2060 (IMAP)、RFC 2616 (HTTP)。其中SMTP的协议最早,时间是1982年8月。其中就已经要求了用<CRLF>。后来的HTTP,也是延续这个RFC的规则。

而Windows 1.0,是1985年的。所以说,这不是Windows的换行方式,而是RFC的标准换行方式,Dos/Windows执行了这个标准换行。




  

相关话题

  如何评价《慕尼黑:Linux带我们到地狱 将在2020年全面拥抱Windows》? 
  Windows 在服务端市场没人用吗? 
  Windows 能不能像 iOS 一样通过点击「电脑属性 - 升级」,同时不改变已有程序和设置的方式来升级? 
  微软宣布 Windows 11 将会在 10 月 5 日正式推送,你会第一时间更新「尝鲜」吗? 
  客户端 POST 错误,服务端应该回 200 还是 400? 
  为什么WinXP的驱动无法用于Win7、Vista,但是Win7,Vista驱动可用于Win10? 
  Windows NT 内核与 Linux 内核相比哪个更安全? 
  在拖拽交互上,macOS 是否比 Windows 更好? 
  为什么 Microsoft 对 Windows 变成垃圾场无动于衷? 
  从操作系统本身来看Linux是否比Windows优秀? 

前一个讨论
先用md5,再用sha1,这样密码会安全一点吗?
下一个讨论
医生真的比程序员好吗?





© 2024-06-12 - tinynew.org. All Rights Reserved.
© 2024-06-12 - tinynew.org. 保留所有权利