HTTP协议介绍一

486 阅读7分钟

HTTP背景介绍

1989年,蒂姆·伯纳斯 - 李(Tim Berners-Lee)发表了一篇论文,提出了在互联网上构建超链接文档系统的构想。这篇论文中他确定了三项关键技术。

  1. URI: 即统一资源标识符,作为互联网上资源的唯一身份
  2. HTML: 即超文本标记语言,描述超文本文档
  3. HTTP: 即超文本传输协议,用来传输超文本 这三项技术为超文本系统完美运行在互联网上奠定了基础。所以在这一年,也是HTTP诞生年,从此开启了它伟大的征途。
  • HTTP/0.9: 结构简单,为了便于服务器和客户端处理,它采用了纯文本格式,所以只允许用GET动作从服务器获取HTML文档,在响应请求后立即关闭连接。
  • HTTP/1.0: 在1996年正式发布,它在多方面增强了0.9版,如下:
    1. 增加了HEAD、POST等新方法
    2. 增加了响应状态码、标记可能的错误原因
    3. 引入了协议版本号概念
    4. 引入了HTTP Header的概念,让处理请求和响应更加灵活
    5. 传输的数据不再仅限于文本
  • HTTP/1.1: 主要变更点有:
    1. 增加了PUT、DELETE等新方法
    2. 增加了缓存管理和控制
    3. 明确了连接管理、允许持久连接
    4. 允许响应数据分块,利于传输大文件
    5. 强制要求Host头,让互联网主机托管成为可能
  • HTTP/2: 充分考虑了互联网的现状,宽带,移动,不安全,在高度兼容HTTP/1.1的同时在性能改善方面做了很大努力,主要特点:
    1. 二进制协议,不再是纯文本
    2. 可发起多个请求,废弃了1.1里的管道
    3. 使用专用算法压缩头部,减少数据传输量
    4. 允许服务期主动向客户端推送数据
    5. 增强了安全性,要求加密通信
  • HTTP/3: HTTP over QUIC, 基于UDP的低时延的互联网传输层协议。

HTTP相关概念

HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。 下面介绍一下与HTTP相关的概念

  • 网络世界:互联网里面存储着无穷无尽的信息资源,通常我们所说的上网,实际上访问的只是互联网的一个子集“万维网”(World Wide Web),它基于HTTP协议,传输HTML等超文本资源,能力也就被限制在HTTP协议之内。互联网还有许多万维网之外的资源,例如常用的电子邮件,BT和Magnet点对点下载,SSH安全登录,各种即时通信服务等等,它们需要用各自的专有协议来访问。
  • 浏览器:本质上是一个HTTP协议的请求方,使用HTTP协议获取网络上的资源。为了让用户更好地检索查看网页,它还集成了很多额外的功能。
  • Web服务器: 它是HTTP协议里响应请求的主体,通常也把控着绝大多数的网络资源,在网络世界里处于强势地位。
  • CDN: 内容分发网络。它应用了HTTP协议里的缓存和代理技术,代替源站响应客户端的请求。
  • 爬虫:HTTP协议并没有规定用户代理后面必须是“真正的人类”,它也完全可以是“机器人”,这些机器人的正式名称就叫做“爬虫”,实际上是一种可以自动访问Web资源的应用程序。
  • HTML: 是HTTP协议传输的主要内容之一,它描述了超文本页面,用各种标签定义文字,图片等资源和排版布局,最终由浏览器渲染出可视化页面。
  • Web Service: 是一种W3C定义的应用服务开发规范,使用client-server主从架构,通常使用WSDL定义服务接口,使用HTTP协议传输XML或SOAP消息,它是一个基于Web的服务架构技术,既可以运行在内网,也可以在适当保护后运行在外网。
  • WAF: 与硬件防火墙类似,它是应用层面的防火墙,专门检测HTTP流量,是防护Web应用的安全技术。

HTTP相关协议

TCP/IP协议实际上是一系列网络通信协议的统称,最核心的两个协议TCP和IP,还有UDP,ICMP,ARP等,共同构成。TCP属于传输层,IP属于网际层。

  • IP协议:主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。
  • TCP协议:它位于IP协议之上,基于IP协议提供可靠的,字节流形式的通信,是HTTP协议得以实现的基础。
  • DNS: 域名系统,用有意义的名字来作为IP地址的等价替代。
  • URI/URL: URI统一资源标识符,使用它就能够唯一地标记互联网上资源。URI另一个更常用的表现形式是URL统一资源定位符,也就是我们俗称的网址。URI一般由三部分构成:协议名(http)+主机名(域名或ip地址)+ 路径
  • HTTPS: HTTP over SSL/TLS, 相当于HTTP + SSL/TLS + TCP/IP, SSL/TLS是一个负责加密通信的安全协议,建立在TCP/IP之上,是一个可靠的传输协议,可以被用作HTTP的下层。
  • 代理:是HTTP协议中请求方和应答方中间的一个环节,作为中转站,既可以转发客户端的请求,也可以转发服务器的应答。常见代理:
    1. 匿名代理:完全隐匿了被代理的机器,外界看到的只是代理服务器
    2. 透明代理:它在传输过程中是透明开放的,外界既知道代理,也知道客户端
    3. 正向代理:靠近客户端,代表客户端向服务器发送请求
    4. 反向代理:靠近服务端,代表服务器响应客户端的请求

HTTP域名

域名是一个有层次的结构,是一串用“.”分隔的多个单词,最右边是“顶级域名”,然后是“二级域名”,层级关系向左依次降低。比如:juejin.cn/ 这里的“cn”就是顶级域名,“juejin”是主机名

像IP地址必须转换成MAC地址才能访问主机一样,域名也必须要转换成IP地址,这个过程是域名解析。每天网络上的发生的HTTP流量是个天文数字,这些请求绝大多数都是基于域名来访问网站的,所以DNS就成了互联网的重要基础设施,必须要保证域名解析稳定可靠,快速高效。

DNS的核心系统是一个三层的树状,分布式服务,基本对应域名的结构:

  1. 根域名服务器:管理顶级域名服务器,返回com,net,cn等顶级域名服务器的IP地址
  2. 顶级域名服务器:管理各自域名下的权威域名服务器,比如apple.com服务器的IP地址
  3. 权威域名服务器:管理自己域名下主机的IP地址,www.apple.com 服务器的IP地址

为了减轻核心DNS服务器域名解析的压力,并且能够更快的获取结果,可以使用缓存。整体架构如下:

image.png 基于域名查找IP的顺序如下:

  1. 查询浏览器本身的缓存
  2. 查询操作系统的缓存
  3. 查询hosts文件
  4. 非权威域名服务器
  5. 根域名服务器
  6. 顶级域名服务器
  7. 二级域名服务器
  8. 权威域名服务器