HTTP协议的发展历史

HTTP/0.9

0.9版本是第一个定稿的HTTP版本,相对较为简陋。它有以下特点:

  • 只有一个命令GET
  • 没有header等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接

注意一点,0.9版本的HTTP协议只要服务器发送完毕,就直接关闭TCP连接,也就是说,一次TCP连接只能发送一次HTTP请求。

HTTP/1.0

1.0版本在0.9版本上做出了很多创新和优化,该版本:

  • 增加了新的命令(POST命令和HEADER命令)
  • 增加status code(状态码)和header
  • 增加多字符集支持、多部分发送、authorization(权限)、cache(缓存)等

在这个版本,基本实现了HTTP协议的框架。

HTTP/1.1

1.1版本解决了大量1.0版本的痛点,该版本新增了以下功能:

  • 持久连接(keep alive)
  • 管道化(pipeline)
  • host和其他一些命令

在1.1版本以前,每次HTTP请求,都会重新建立一次TCP连接,服务器响应后,就立刻关闭。众所周知,建立TCP连接的新建成本很高,因为需要三次握手,并且有着慢启动的特性导致发送速度较慢。而1.1版本添加的持久连接功能可以让一次TCP连接中发送多条HTTP请求,值得一提的是默认是,控制持久连接的Connection字段默认值是keep-alive,也就是说是默认打开持久连接,如果想要关闭,只需将该字段的值改为close

而管道化则赋予了客户端在一个TCP连接中连续发送多个请求的能力,而不需要等到前一个请求响应,这大大提高了效率。值得一提的是,虽然客户端可以连续发送多个请求,但是服务器返回依然是按照发送的顺序返回。

host字段指定了服务器的域名,这允许一个物理服务器上可以建立多个虚拟服务器。

HTTP/1.1是使用最广泛的HTTP协议。

HTTP2

  • 所有数据都以二进制传输
  • 同一个连接里面发送多个请求不再需要按照顺序来
  • 头信息压缩以及推送等提高效率的功能

这里提下推送功能,众所周知,服务器推送一直是web开发的一大难点,原因就在于在HTTP2之前的版本都不支持服务器推送。而HTTP2允许服务器未经请求,主动向客户端发送资源。也就是说,当你向服务器请求html的时候,服务器可以直接将css和js一起推送给你,而不需要解析html再请求css和js,这大大提高了效率。

最新文章

  1. iOS UIGestureRecognizer与UIMenuController(内容根据iOS编程)
  2. 搜索 录音功能 Android api
  3. Android源码分析之AsyncTask
  4. thinkphp和uploadfiy
  5. 【leetcode❤python】342. Power of Four
  6. oracle 运维基础
  7. OpenStack: OVS安装
  8. Android imageview显示圆形图片
  9. MyTask4
  10. AfxMessageBox("这里为提示框的内容");程序弹出一个提示窗口,可以做调试提示信息
  11. md5实现
  12. linux下查看所有用户及所有用户组
  13. javascript中的window.open()被浏览器拦截
  14. 小白学爬虫-批量部署Splash负载集群
  15. IOS 与ANDROID框架及应用开发模式对比一
  16. 《PHP内核剖析 - 变量/内存管理》
  17. 关于如何使用ehcarts2加载svg矢量地图并自定义县级内部乡镇轮廓
  18. 怎样让引用类库的类在HelpPage上显示Description
  19. Django-认证系统
  20. 【转载】6种.net分布式缓存解决方案

热门文章

  1. linux配置了dns后导致mysql远程连接慢问题
  2. JS控制元素可见(显示)与不可见(隐藏)
  3. 布局的诡异bug合集+解决方法(更新中)
  4. Maven常用操作
  5. hibernate实现有两种配置,xml配置与注释配置。<转>
  6. 【黑金ZYNQ7000系列原创视频教程】04.熟悉ZYNQ内部中断——内部定时器中断实验
  7. nodejs 重定向 (redirect + writeHead(Location))
  8. onethink插件控制器如何访问?
  9. Think PHP递归重新排序无限极子分类数组(递归无限极分类)
  10. 【node】------node连接mongodb操作数据库------【巷子】