第一章 破冰篇

HTTP 的前世今生

  • 20 世纪 60 年代,美国国防部高等研究计划署(ARPA)建立了 ARPA 网,它有四个分布在各地的节点,被认为是如今互联网的“始祖”。
  • 然后在 70 年代,基于对 ARPA 网的实践和思考,研究人员发明出了著名的 TCP/IP 协议。
  • 并在 80 年代中期进入了 UNIX 系统内核
  • 1989 年,任职于欧洲核子研究中心(CERN)的蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。这篇论文中他确立了三项关键技术。
    • URI:即统一资源标识符,作为互联网上资源的唯一身份;
    • HTML:即超文本标记语言,描述超文本文档;
    • HTTP:即超文本传输协议,用来传输超文本。
  • 20 世纪 90 年代初期,HTTP0.9 版本流行,充分验证了 Web 服务的可行性。
  • 1993 年,NCSA(美国国家超级计算应用中心)开发出了 Mosaic,是第一个可以图文混排的浏览器,随后又在 1995 年开发出了服务器软件 Apache,简化了 HTTP 服务器的搭建工作。
  • 1992 年发明了 JPEG 图像格式,1995 年发明了 MP3 音乐格式。
  • HTTP/1.0 版本在 1996 年正式发布,并不是一个“标准”,相当于一个“备忘录”。
    • 增加了 HEAD、POST 等新方法;
    • 增加了响应状态码,标记可能的错误原因;
    • 引入了协议版本号概念;
    • 引入了 HTTP Header(头部)的概念,让 HTTP 处理请求和响应更加灵活;
    • 传输的数据不再仅限于文本。
  • 1999 年,HTTP/1.1 发布了 RFC 文档,编号为 2616。它是一个“正式的标准”,相当于是互联网世界的一个“立法”。
    • 增加了 PUT、DELETE 等新的方法;
    • 增加了缓存管理和控制;
    • 明确了连接管理,允许持久连接;
    • 允许响应数据分块(chunked),利于传输大文件;
    • 强制要求 Host 头,让互联网主机托管成为可能。
  • 在 Google Chrome 浏览器的倒逼下,互联网标准化组织以 SPDY 为基础开始制定新版本的 HTTP 协议,最终在 2015 年发布了 HTTP/2,RFC 编号 7540。
    • 二进制协议,不再是纯文本;
    • 可发起多个请求,废弃了 1.1 里的管道;
    • 使用专用算法压缩头部,减少数据传输量;
    • 允许服务器主动向客户端推送数据;
    • 增强了安全性,“事实上”要求加密通信。
  • 2018 年,互联网标准化组织 IETF 提议将“HTTP over QUIC”更名为“HTTP/3”并获得批准。

HTTP 是什么?HTTP 又不是什么?

你可能会不假思索、脱口而出:“HTTP 就是超文本传输协议,也就是 HyperText Transfer Protocol。”

HTTP 是一个在计算机世界里专门在两点之间传输数据的约定和规范

在互联网世界里,HTTP 通常跑在 TCP/IP 协议栈之上,依靠 IP 协议实现寻址和路由、TCP 协议实现可靠数据传输、DNS 协议实现域名查找、SSL/TLS 协议实现安全通信。此外,还有一些协议依赖于 HTTP,例如 WebSocket、HTTPDNS 等。这些协议相互交织,构成了一个协议网,而 HTTP 则处于中心地位。

与 HTTP 相关的各种概念

互联网的正式名称是 Internet,里面存储着无穷无尽的信息资源,我们通常所说的“上网”实际上访问的只是互联网的一个子集“万维网”(World Wide Web),它基于 HTTP 协议,传输 HTML 等超文本资源,能力也就被限制在 HTTP 协议之内。

在 HTTP 协议里,浏览器的角色被称为“User Agent”即“用户代理”,意思是作为访问者的“代理”来发起 HTTP 请求。不过在不引起混淆的情况下,我们通常都简单地称之为“客户端”。

与 HTTP 相关的各种协议

  1. TCP/IP 是网络世界最常用的协议,HTTP 通常运行在 TCP/IP 提供的可靠传输基础上;

    • IP 协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。
    • TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于 IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础。
  2. DNS 域名是 IP 地址的等价替代,需要用域名解析实现到 IP 地址的映射;

  3. URI 包含 URL 和 RUN。

    <a href="mailto:cay@horstman.com">URN</a>
    <a href="<http://www.w3school.com.cn>">URL</a>
    
  4. HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,为 HTTP 套了一个安全的外壳。SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,改名为 TLS,即“Transport Layer Security”,但由于历史的原因还是有很多人称之为 SSL/TLS,或者直接简称为 SSL。

  5. 代理是 HTTP 传输过程中的“中转站”,可以实现缓存加速、负载均衡等功能。

常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?

第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;

第二层:数据链路层,它基本相当于 TCP/IP 的链接层;负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。

第三层:网络层,相当于 TCP/IP 里的网际层,IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。

第四层:传输层,相当于 TCP/IP 里的传输层,这个层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,是 TCP 协议工作的层次,另外还有它的一个“小伙伴”UDP。

TCP 是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。而 UDP 则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方。两个协议的另一个重要区别在于数据的形式。TCP 的数据是连续的“字节流”,有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收。

第五层:会话层,维护网络中的连接状态,即保持会话和同步;

第六层:表示层,把数据转换为合适、可理解的语法和语义;

第七层:应用层,面向具体的应用传输数据。

MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

域名里有哪些门道?

MAC 是物理上的唯一性质,通过 IP 抽象后,可以进行不同层次组网。