回车(CR )和换行(LF )源自电传打字机的操作需求,CR 将打印头复位到行首,LF 则下移纸张。不同操作系统采用了不同行尾标记:Unix使用 \n ,Windows使用 \r\n ,Mac使用 \r。这种差异导致跨平台文件显示问题。
运行环境:
- Windows-7-Ultimate-x64、Windows-10-BusinessEditions-22H2-x64、CentOS-7.9.2009-x64
1、CRLF的定义
今天,我总算搞清楚"回车"(C arriage R eturn)和"换行"(L ine Feed)这两个概念的来历和区别了。
在计算机还没有出现之前,有一种叫做电传打字机 (Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题:在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。

2、在操作系统中的应用
电子计算机的发明,将两个概念也就被搬到了计算机上。那时候存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧:
- Windows 系统:每行结尾是 回车CR 换行LF,即 \r\n;
- Unix 系统:每行结尾只有 换行LF,即 \n;
- Mac 系统:每行结尾是 回车CR,即 \r。
注意:
- Unix/Mac系统的文件,在Windows里打开,所有文字会变成一行;
- Windows系统的文件,在Unix/Mac下打开,在每行的结尾可能会多出一个**^M**符号。



3、相关的安全问题
CRLF(C arriage R eturn L ine Feed)字符不仅在文本处理中扮演重要角色,还与安全领域密切相关,尤其是CRLF注入攻击。这类攻击中,黑客通过向应用程序注入恶意CRLF字符,篡改其正常行为。例如:攻击者可能利用CRLF伪造HTTP头部,借此绕过应用程序的安全机制,或与服务器建立未经授权的通信链路。因此,前端开发人员必须掌握此类攻击的原理,并采取有效防范措施,以保障应用程序的安全性。
附录: