HTTP的前世今生

成为web后台开发已有一段时间,在同事的建议下,打算趁机系统的学习一下htpp协议。
本人小萌新一谋,在此记录自己的学习历程,本文主要介绍HTTP协议的历史演变过程,以求能够更好的理解其设计思路。

HTTP是什么?

首先,我们先来看一下,HTTP到底是什么?

不假思索的,我们就能说出:“HTTP 就是超文本传输协议 即 HyperText Transfer Protocol” 这个里面有三个关键词 超文本 传输
协议 ,所以本质上 HTTP 还是一种Protocol。

HTTP的诞生,HTTP 0.9版本

1989年,在 互联网上构建超链接文档系统的构想 首次被 TimBerners_Lee发表于他的论文当中,论文确立了三项关键技术。

  1. URL: 统一资源标识符,作为互联网上资源的唯一身份;
  2. HTML: 超文本标记语言,描述超文本文档;
  3. HTTP: 超文档传输协议,用于传输超文本;

1991年正式发布HTTP的0.9版本,由于当时互联网的环境还处于发展最初期的时候,计算机 不仅处理能力, 存储量小, 网速也是相当的慢,所以在这样的背景下,0.9版本的HTPP协议也是极其简单, 只包含了一个命令 GET。

GET /index.html

上面命令表示,TCP连接建立后,客户端向服务器请求网页。

此时,服务器也只能回应HTML格式的字符串,不能回应其他的格式。
并且,响应结束后,连接立即关闭。

虽说,0.9版本的HTTP 功能单一,但和当时的简陋互联网环境相比,0.9版本的HTTP的诞生已经足够支持人们在互联网上获取文件,传递信息。

随着互联网环境的优化,各色浏览器、文件格式的诞生,单一的HTTP协议已经不能够满足人们在互联网传递信息的需求。比如,JPEG的图像格式,MP3的音乐格式,均是在那个时期诞生。

HTPP 的进阶 , HTTP 1.0 版本

终于,1996年HTTP的1.0版本正式发布。相比于0.9版本,1.0版本的HTTP发生了哪些变化呢?

  1. 增加了HEAD POST 等新方法;
  2. 增加了响应状态码,用来标记可能出错的原因;
  3. 引入协议版本号的概念;
  4. 引入HTTP Header的概念,用来描述一些元数据;
  5. 传输的数据不再仅限于文本;
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

第一行为请求命令  后跟版本号
新增的头方法,用于描述客户端的一些情况

HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>

回应的格式: 头信息 + 一个空行(\r\n) + 数据
第一行是 协议版本 + 状态码(status code) + 状态描述

Content-Type:由于1.0版规定,头信息必须是 ASCII 码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式。

HTTP 的微调, HTTP 1.1版本

1997年, HTTP 1.1版本发布。而该版本至今仍是使用最多的HTTP版本。那么相比于1.0版本的HTTP, 1.1又做了哪些改进呢?

  1. 引入持久连接(persistent connection;
  2. 增加缓存管理和控制;
  3. 增加PUT DELETE等新方法;
  4. 允许响应数据分块,利于传输大文件;
  5. 强制要求Host头,让互联网主机托管成为可能;

HTTP 的性能之战, HTTP 2版本

2015年,HTTP/2 发布, http2 基于 Google 的 SPDY 协议,更加注重于性能的改善。
主要特点有:

  1. 二进制协议,不再是纯文本;
  2. 可发起多个请求,废弃了 1.1 里的管道;;
  3. 使用了专用的算法压缩头部,减少了数据的传输量;;
  4. 允许服务器主动向客户端推送数据;
  5. 要求加密通信,增强了安全性;

HTTP 的未来,HTTP 3版本

2018年,互联网标准化组织 IETF 提议将 ”HTTP over QUIC”更名为 “HTTP/3” 已经获得批准, HTTP/3 已经正式进入标准化制定阶段。

经过这一系列的改进,我相信HTTP/3值得期待,那么你呢?

到这里,你是不是已经觉得我们今天的历史课已经结束了呢?哈哈,并不是,我想说的是,你有没想过, HTTP 从最初的 HTTP/0.9 到 如今 的HTTP/3 ,到底是谁驱动这他的发展呢? 是google吗? 是标准协会吗? 是你,是我还是他呢?

总结

  1. HTTP/0.9 版本的诞生,实现互联网文本文件的传输与共享;

  2. 随着文件种类的多样化,HTTP/1.0 通过增加方法,完善协议格式等方式实现所有格式文件的传输与共享。
    但是,此时的HTTP连接还只能发送一个请求,而且在数据传输完成后,该连接立即关闭; 此时如果需要请求其他资源,就必须再新建一个连接。
    问题在于 HTTP 是基于 TCP/IP 的应用层协议,每一个连接的建立客户端和服务器都需要进行三次握手,并且信息开始传输时的速率也比较慢(slow start)。所以,随着网页加载的外部资源越来越多,HTTP/1.0的性能问题就愈发突出了。此时,就有浏览器在请求时,将非标准的Connection字段设置为 keep-alive 用于连接的复用,从而改善该性能问题。

  3. HTTP/1.1 版本 通过增加管道, 缓存, 持久连接等方法,增强了每个连接的有效使用率。虽然 HTTP/1.1 已经优化了很多点,并且也是目前使用最广泛的协议, 但是随着网页的复杂性越来越高,HTTP/1.1也暴露出了一些其他问题。 比如,虽然复用了TCP连接后通信效率有所提高, 但是当多个请求同时到达得到时候,仍需依次处理,当请求较多时则会发生头部阻塞; 又比如传输的内容是明文,缺乏安全保障。

  4. 基于HTTP/1.1 所暴露的这些问题,HTTPS 和 SPDY 协议就被尝试用于市面, HTTPS 和 SPDY 并不是两种新的协议,都是基于HTTP协议,在HTTP层下分别添加了SSL层 和 SPDY会话层。具体做了什么样的改动我们不详细展开,但是目标肯定是为了解决HTTP/1.1 所暴露出来的问题。 也是基于这两种协议的积极尝试,HTTP/2 终于在2015年诞生。

最后,需求推进发展, 用户需求越来越高,协议也就越来越完善。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值