01| HTTP的前世今生
史前时期
20世纪70年代,基于对ARPA网的实践和思考,研究人员发明出著名的TCP/IP协议,并在80年代中期进入UNIX系统内核
创世纪
提出超文档链接系统的构想,确立三项关键技术:
URI: 统一资源标识符,作为互联网上资源的唯一身份;
HTML: 超文本标记语言,描述超文本文档;
HTTP: 超文本传输协议,用于传输超文本
HTTP/0.9
只允许用GET请求从服务器上获取HTML文档,并且在响应请求之后立即关闭连接
HTTP/1.0
- 增加HEAD、POST等新方法
- 增加了响应状态码,标记可能的错误原因
- 引入协议版本号的概念
- 引入了HTTP header的概念,让HTTP处理请求和响应更加灵活
- 传输的数据不再仅限于文本
HTTP/1.1
正式的标准,所有浏览器、服务器、网关、代理等,只要用到HTTP协议,就必须严格遵守这个标准。
- 增加PUT、DELETE等新方法
- 增加缓存管理和控制
- 明确了链接管理,允许持久连接
- 运行响应数据分块(chunked),利于传输大文件
- 强制要求Host头,让互联网主机托管称为可能
HTTP/2 基于Google的SPDY协议
- 二进制协议,不再是纯文本;
- 可发起多个请求,废弃1.1里的管道
- 使用专用算法压缩头部,减少数据传输量
- 允许服务器主动向客户端推送数据
- 增加安全性
HTTP/3
基于Google的QUIC协议,目前处于标准化制定阶段
02 | HTTP是什么?HTTP又不是什么?
HTTP是什么
超文本传输协议。 首先HTTP是一个用在计算机世界里的协议,使用计算机能够理解的语言确立一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
HTTP协议是一个双向协议。数据在A和B之间双向流动。举例来说,浏览器就是请求方A,网易、新浪这些网站就是应答方B,双方约定HTTP协议来通信,于是浏览器把一些数据发送给网站、网站再把一些数据发回给浏览器。 数据虽然在A和B之间传输,但并没有限制A和B两个角色,允许中间有“中转”
A<>B变成A<>X<>Y<>B,只要不打扰基本的数据传输,就可以添加任意功能,例如安全认证、数据压缩、编码转换等。因此HTTP是一个在计算机世界里专门用来在两点之前传输数据的约定和规范。
图片、视频、音频、压缩包都可以是”文本”。而”超文本”,是文字、图片、视频、音频等的混合体,最关键是含有”超链接”,能从一个”超文本”跳跃到另一个”超文本”,形成复杂的非线性、网状的结构关系。“超文本”最熟悉的就是HTML,本身只是纯文字文件,但内部用很多标签定义了对图片、音频、视频等的连接,再经过浏览器的解释,呈现一个具有视听信息的页面。
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
- HTTP 是一个用在计算机世界里的协议,它确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
- HTTP 专门用来在两点之间传输数据,不能用于广播、寻址或路由。
- HTTP 传输的是文字、图片、音频、视频等超文本数据。
- HTTP 是构建互联网的重要基础技术,它没有实体,依赖许多其他的技术来实现,但同时许多技术也都依赖于它。
03 | HTTP世界全览(上):与HTTP相关的各种概念
网络世界
通常说的”上网“实际访问的只是互联网的子集的,万维网,它基于http协议,传输HTML等超文本资源,能力也被限制在HTTP协议之内。
互联网上还有许多万维网之外的资源,例如常用的电子邮件、BT、Magnet点对点下载、SSH安全登录等,它们需要用各自专用协议来访问。
浏览器
HTTP协议中的请求方
Web服务器
硬件含义就是物理形式或“云”形式的机器。在大多数情况下它可能不是一台服务器,而是利用方向代理、负载均衡等技术组成的庞大集群。
软件就是提供Web服务的应用程序,通常运行在硬件含义的服务器上。利用强大的硬件能力响应海量的客户端HTTP请求,处理磁盘上的网页、图片等静态文件,或者把请求转发给Tomcat、Node.js等业务应用。
Web服务器一般有Apache、Nginx
CDN
浏览器通常不会直接连到服务器,中间会经过一个重要角色就是CDN。
CDN, Content Deliverty Network, 内容分发网络。它应用了HTTP协议里的缓存和代理技术,代替原站响应客户端的请求。
除了基本的网络加速外,还提供负载均衡、安全防护、边缘计算、跨运营商网络等功能,能成倍地“放大”原站服务器的服务能力。
WebService
Web Service是一种由W3C定义的应用服务开发规范,使用client-server主从架构,通常使用WSDL定义服务接口,使用HTTP协议传输XML或SOAP消息。基于Web(HTTP)的服务架构技术
03 | HTTP世界全览(下):与HTTP相关的各种协议
TCP/IP
TCP/IP协议实际上是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP, 其他还有UDP、ICMP、ARP等,共同构成一个复杂但有层次的协议栈。
这个协议栈有四层,从上到下是应用层-〉传输层-〉网际层-〉链接层。 IP协议主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。
TCP是传输控制协议,它位于IP协议之上,基于IP协议提供可靠的、字节流形式的通信,是HTTP协议得以实现的基础。
可靠是指保证数据不丢失,“字节流”保证数据完整。
DNS
DNS(Domain Name System), 域名系统。域名解析,域名转换到真实IP。
URI/URL
DNS和IP地址只是标记了互联网上的主机,但主机上管理了一大堆文档,要如何准确找出是哪一个呢?
所以就出现URI(Uniform Resource Identifier),统一资源标识符,使用它能够唯一地标记互联网上的资源。
URL(Uniform Resource Locator),统一资源定位符,就是俗称的“网址”,它实际上是URI的一个子集。
URI主要有三个基本的部分构成:
- 协议名:即访问该资源应当使用的协议
- 主机名:互联网上主机的标记,域名或者ip地址
- 路径:资源在主机上的位置,使用“/”分割多级目录。
HTTPS
HTTP, HTTP over SSL/TLS, 运行在SSL/TLS协议上的HTTP。 SSL/TLS是一个负责加密通信的安全协议,建立在TCP/IP。HTTPS相当于HTTP+SSL/TLS+TCP/IP。
SSL使用了许多密码学先进的研究成功,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术。
代理
代理常见的种类有:
- 匿名代理:完全隐匿了被代理的机器,外界看到的只是代理服务器。
- 透明代理:在传输过程中是“透明开放”的,外界即知道代理,也知道客户端
- 正向代理:靠近客户端,代表客户端向服务器发送请求;
- 反向代理:靠近服务器端,代表服务端响应客户端的请求;
代理在传输过程中插入一个“中间层”,可以在这个环节做很多事情:
- 负载均衡: 把访问请求均匀分散到多台机器,实现访问集群化
- 内容缓存:暂存上下行的数据,减轻后端的压力
- 安全防护:隐匿IP,使用WAF等工具抵御网络攻击,保护被代理的机器、
- 数据处理:提供压缩、加密等额外功能
正向代理 vs 反向代理 正向代理:为了从目标服务器获得内容,客户端从代理服务器发送一个请求并制定目标,代理服务器向目标服务器转交请求并将获得的内容返回客户端。like 科学上网 “代理服务器”代理了客户端,去和目标服务器进行交互
反向代理:代理服务器代理了目标服务器,去和客户端交互
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
TCP/IP网络分层模型
第一层是链接层,负责在以太网、wifi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用mac地址来标记网络上的设备,有时候也叫mac层。
第二层是网际层或者网络互联层。IP协议就在这一层,IP协议定义了IP地址的概念,所以可以在链接层的基础上,用IP地址取代MAC地址,用IP地址取代MAC地址,把许多局域网、广域网连接成一个虚拟的巨大网络。
第三层是传输层,这个层的协议职责是保证数据在IP地址标记的两点之间可靠地传输,是TCP、UDP协议工作的层次。
TCP是有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。
UDP是无状态的,不用建立连接就可以发送任意数据,但不保证数据一定会发到对方。
两个协议的另一个重要区别在于数据的形式,TCP数据的连续的字节流,有先后顺序。UDP则是分散的小数据包,顺序发,乱序收。
第四层是应用层,有各种面向具体应用的协议,like Telnet、SSH、FTP、HTTP
MAC层的传输单位是帧,IP层传输单位是包,TCP传输单位是段,HTTP的传输单位是消息或报文。
OSI网络分层模型
OSI(Open System Interconnection Reference Model),开放式系统互联通信参考。 TCP/IP发明于1970年代,设计出一个新的网络分层模型,想用这个新框架来统一既存的各种网络协议。
OSI模型分成了七层:
- 第一层:物理层,网络的物理形式,例如电缆、光纤、网卡等
- 第二层:数据链路层,基本相当于TCP/IP的链路层
- 第三层:网络层,相当于TCP/IP的网际层
- 第四层:传输层,相当于TCP/IP的传输层
- 第五层:会话层,维护网络中的连接状态,即保持会画和同步;
- 第六层:表示层,把数据转换为合适、可理解的语法和语义
- 第七层:应用层,面向具体的应用传输协议,like HTTP
第五六七层统一对应到TCP/IP的应用层
二层转发:二层指数据链路层,工作在二层的设备,通过查找到目标MAC地址,进行数据转发 三层路由:三层是指网络层,工作在三层的设备,通过解析数据包头信息,找到目标IP地址,转发数据 CDN、DNS都是处于应用层
06 | 域名里有哪些门道?
域名解析:IP地址必须转换成MAC地址才能访问主机,域名也必须转换成IP地址
DNS核心系统是一个三层的树状、分布式服务,基本对应域名的结构:
- 根域名服务器:管理顶级域名服务器,返回com、net、cn等顶级域名服务器IP地址
- 顶级域名服务器:管理各自域名下的权威域名服务器,比如com顶级域名服务器可以返回apple.com域名服务器的IP地址
- 权威域名服务器:管理自己域名下主机的IP地址,比如apple.com权威域名服务器可以返回www.apple.com的IP地址
假如要访问www.apple.com,会经历下面三次查询
- 访问根域名服务器,它会告诉你com顶级域名服务器的地址
- 访问com顶级域名服务器,再告诉你apple.com域名服务器的地址
- 最后访问apple.com域名服务器,得到www.apple.com的地址
为了减轻域名解析的压力,会使用缓存来解决,有两种方法:
- 公司、网络运行商建立自己的DNS服务器,作为用户DNS查询的代理,代替用户访问核心DNS系统。可以缓存之前的查询结果,如果已经有记录,就无须再向根服务器发起查询,直接返回对应的IP地址
- 操作系统里也会对DNS解析结果做缓存,如果之前访问过www.apple.com,那么下一次在浏览器里再输入这个网址就不会再跑到DNS访问,直接在操作系统拿到IP地址
基于域名的负载均衡
- 因为域名解析可以返回多个IP地址,所以一个域名可以对应多台主机,客户端收到多个IP地址后,就可以使用轮询算法依次向服务器发起请求,实现负载均衡
- 域名解析可以配置内部的策略,返回离客户端最近的主机,或者返回当前服务质量最好的主机,在DNS端把请求分发到不同服务器,实现负载均衡
DNS解析过程:浏览器DNS缓存 -> 操作系统缓存 -> hosts文件 -> 非权威域名服务器 -> 根域名服务器 -> 顶级域名服务器 -> 权威域名服务器