说一说http的发展史

简介: 说一说http的发展史

前言

HTTP (Hypertext Transfer Protocol) 是一种用于传输超文本的应用层协议。它是万维网的基础,用于在客户端和服务器之间传输资源,如 HTML 页面、图像、视频等。

HTTP的发展史可以追溯到互联网的早期阶段, 那个时候的数据是写死的,只能传输纯文本数据。从最早的HTTP/0.9到如今的HTTP/3,HTTP协议发生了许多的变化,今天我们就来聊聊HTTP各个版本叭。

HTTP/0.9

HTTP/0.9是HTTP协议的最早版本,也是最简单的版本,于1991年由蒂姆·伯纳斯-李(Tim Berners-Lee)创建。它的设计目标是简单、易于实现,用于传输超文本。

  1. 客户端发送GET请求,请求一个  xxxx/index.html
  2. 服务器接受到请求后,读取对应的html文件,以ASCII的字符流返回给客户端

特征

  1. 只支持GET请求
  • HTTP/0.9只支持一种请求方法,即GET方法。这意味着客户端只能请求服务器上的资源,并不能向服务器发送任何数据。例如,通过GET请求可以请求一个HTML页面,但不能通过HTTP/0.9协议向服务器提交表单数据。
  1. 只支持纯文本
  • HTTP/0.9只能传输纯文本数据,不能传输二进制数据或其他类型的数据。因此,它主要用于传输HTML页面和超文本链接。
  1. 只有请求行,没有请求头和请求体
  2. 没有响应头
  3. 传输的内容是以ASCII的字符流

HTTP/1.0

HTTP/1.0是HTTP协议的一个重要版本,它于1996年发布。HTTP/1.0在HTTP/0.9的基础上引入了许多新的功能和改进,使得它更加灵活和功能强大。

  1. 相比于HTTP/0.9, HTTP/1.0可以支持多种类型文件的传输, 且不限于ASCII编码方式
  2. 因为Http/1.0支持多种类型文件的传输,那么就需要告诉浏览器需要以哪种方式去加载这些文件,通过引入请求头和响应头来让客户端和服务端更加深入的交流,key-value形式。

特征

  1. 支持多种请求方法
  • HTTP/1.0引入了多种请求方法,包括GET、POST、HEAD、PUT、DELETE等。这些请求方法允许客户端向服务器发送不同类型的请求,如获取资源、提交数据、获取资源头部信息等。
  1. 响应状态码
  • HTTP/1.0引入了响应状态码,用于指示服务器对请求的处理结果。常见的状态码包括200(OK,请求成功)、404(Not Found,资源未找到)、500(Internal Server Error,服务器内部错误)等。

HTTP/1.1

HTTP/1.1是HTTP协议的一个重要版本,于1999年发布。它在HTTP/1.0的基础上引入了许多改进和新特性,提高了性能、效率和安全性。

  1. 持久连接
  • HTTP/1.1默认支持持久连接,即在单个TCP连接上可以发送和接收多个HTTP请求和响应,而不必为每个请求建立新的连接。这减少了连接建立和关闭的开销,提高了性能和效率。但是持久连接会带来队头阻塞的问题。

队头阻塞:如果某个请求因为某种原因被阻塞,那么后续的请求也会被阻塞,从而导致页面加载速度下降。

页面中的所有不可能一次性的请求回来,所以可能会存在多条TCP持久连接,浏览器默认支持  6个TCP持久连接

  1. Chunk transfer 机制:
  • 将数据分割成若干个任意大小的数据块,每个数据块标记好长度,最后发送一个长度为0的数据块为标志发送完毕

http/1.0中,需要在响应头中设置数据的大小,例如content-Length: 1024,但是后端并不清楚自己所发的数据的大小,数据有可能是动态的。所以http/1.1中推出Chunk transfer去解决这个问题。

  1. 虚拟主机的默认支持
  • HTTP/1.1将虚拟主机的支持作为默认功能,不再需要通过特殊的头部信息指定主机。这使得托管多个域名的服务器更容易配置和管理。
  1. Host头部
  • HTTP/1.1引入了Host头部,用于指定请求的目标主机。这使得在同一台服务器上托管多个域名的虚拟主机更加灵活和简单。

HTTP/2.0

  • 1.1 的问题: 带宽用不满
  1. TCP的慢启动: 拥塞控制导致一定会慢启动,慢启动导致页面关键资源加载时间推后
  2. 多条TCP连接竞争带宽导致每条TCP连接中能被分配的带宽大大降低
  3. 队头阻塞,前一个请求延迟,后一个请求便无法发送,导致带宽浪费

HTTP/2.0通过引入多路复用来优化

多路复用

  1. 一个域名只使用一个TCP长连接
  2. 将每一个请求分成一帧一帧的数据进行传输并打上标记,同时发送给服务端,且可以在重要资源 请求中编辑为加急,服务端接受到带有各种标号的数据帧后,可以区分哪个数据帧加急,优先整理 和响应该请求的数据帧  (通过引入了二进制分帧层实现多路复用)

HTTP/3.0

2.0的缺陷:

  1. TCP的队头阻塞: 当单个数据包丢失时,TCP会暂停后续的包的传输,先重传丢失的包数据
  2. TCP的慢启动

基于 QUIC 协议

  • HTTP/3 使用 QUIC(Quick UDP Internet Connections)作为传输协议,取代了 TCP。QUIC 是基于 UDP 的协议,结合了传输层和应用层协议的功能,提供了更快的连接建立、更灵活的拥塞控制和更强的安全性。QUIC 还支持多路复用和头部压缩等功能,有助于提高性能和效率。
相关文章
|
网络协议 前端开发 算法
http发展史
http发展史
|
JSON Java API
【Java技术指南】「Unirest编程专题」一起认识一下一个“灰常”优秀的Http工具,让Http开发变得如此简单
Unirest-Java是一个轻量级的HTTP客户端库,它提供了简单易用的API,可以帮助Java开发人员快速地发送HTTP请求和处理响应。在本文中,我们将深入探讨Unirest-Java的技术细节和使用方法。
318 1
|
域名解析 网络协议 大数据
小白必须掌握的几点HTTP协议的基础知识,建议收藏
1.TCP/IP的分层管理 TCP/IP协议族里重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层 应用层: 应用层决定了向用户提供应用服务时通信的活动。 TCP/IP协议族内预存了各类通用的应用服务。比如,FTP(文件传输协议)和DNS(域名系统)服务就是其中两类。HTTP协议也处于该层。
147 1
小白必须掌握的几点HTTP协议的基础知识,建议收藏
|
前端开发 安全 网络协议
前端面试题目总结(Http)
前端面试题目总结(Http)
114 0
前端面试题目总结(Http)
|
XML 缓存 移动开发
你还在为 HTTP 的这些概念头疼吗?(二)
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就全面一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层)
91 0
你还在为 HTTP 的这些概念头疼吗?(二)
|
XML 存储 缓存
你还在为 HTTP 的这些概念头疼吗?(四)
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就全面一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层)
94 0
你还在为 HTTP 的这些概念头疼吗?(四)
|
缓存 网络协议
你还在为 HTTP 的这些概念头疼吗?(一)
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就全面一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层)
85 0
你还在为 HTTP 的这些概念头疼吗?(一)
|
算法 网络协议 安全
你还在为 HTTP 的这些概念头疼吗?(三)
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就全面一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层)
143 0
你还在为 HTTP 的这些概念头疼吗?(三)
|
网络协议 安全
《面试官:你如何理解HTTP协议?》
《面试官:你如何理解HTTP协议?》
|
网络协议 区块链
重温HTTP,你到底做了什么?(下)
之前在回忆面试题的时候,面试官曾经问过我关于网络协议的一些东西,回答的当时感觉自己很垃圾,然后面试结束之后,自行百度,翻阅书籍,然后做了细致的整理,现在我就来分享给大家。
重温HTTP,你到底做了什么?(下)