HTTP 协议 :Hyper Text Transfer Protocol(超文本传输协议), 是用于从万维网 (WWW:World Wide web) 服务器传输超文本到本地浏览器的传送协议是互联网上应用最为广泛的一种网络协议所有的 WWW 文件都必须遵守这个标准
HTTP 是一个基于 TCP/IP 通信协议来传递数据(html 文件, 图片文件, 查询结果等)
HTTP/0.9
HTTP/0.9 是第一个版本的 HTTP 协议, 已过时它的组成极其简单, 只允许客户端发送 GET 这一种请求, 且不支持请求头由于没有协议头, 造成了 HTTP/0.9 协议只支持一种内容, 即纯文本不过网页仍然支持用 HTML 语言格式化, 同时无法插入图片
HTTP/0.9 具有典型的无状态性, 每个事务独立进行处理, 事务结束时就释放这个连接由此可见, HTTP 协议的无状态特点在其第一个版本 0.9 中已经成型一次 HTTP/0.9 的传输首先要建立一个由客户端到 Web 服务器的 TCP 连接, 由客户端发起一个请求, 然后由 Web 服务器返回页面内容, 然后连接会关闭如果请求的页面不存在, 也不会返回任何错误码
HTTP/1.0
HTTP 协议的第二个版本, 第一个在通讯中指定版本号的 HTTP 协议版本, 至今仍被广泛采用相对于 HTTP/0.9 增加了如下主要特性:
请求与响应支持头域
响应对象以一个响应状态行开始
响应对象不只限于超文本
开始支持客户端通过 POST 方法向 Web 服务器提交数据, 支持 GETHEADPOST 方法
支持长连接(但默认还是使用短连接), 缓存机制, 以及身份认证
HTTP/1.1
HTTP 协议的第三个版本是 HTTP/1.1, 是目前使用最广泛的协议版本 HTTP/1.1 是目前主流的 HTTP 协议版本, 相对于 HTTP/1.0 新增了以下内容:
默认为长连接
HTTP 1.1 支持长连接 (PersistentConnection) 和请求的流水线 (Pipelining) 处理, 在一个 TCP 连接上可以传送多个 HTTP 请求和响应, 减少了建立和关闭连接的消耗和延迟, 在 HTTP1.1 中默认开启 Connection:keep-alive, 一定程度上弥补了 HTTP1.0 每次请求都要创建连接的缺点
提供了范围请求功能(宽带优化)
HTTP1.0 中, 存在一些浪费带宽的现象, 例如客户端只是需要某个对象的一部分, 而服务器却将整个对象送过来了, 并且不支持断点续传功能, HTTP1.1 则在请求头引入了 range 头域, 它允许只请求资源的某个部分, 即返回码是 206(Partial Content), 这样就方便了开发者自由的选择以便于充分利用带宽和连接这是支持文件断点续传的基础
提供了虚拟主机的功能(HOST 域)
在 HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址, 因此, 请求消息中的 URL 并没有传递主机名 (hostname) 但随着虚拟主机技术的发展, 在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers), 并且它们共享一个 IP 地址 HTTP1.1 的请求消息和响应消息都应支持 Host 头域, 且请求消息中如果没有 Host 头域会报告一个错误(400 Bad Request)
多了一些缓存处理字段
HTTP/1.1 在 1.0 的基础上加入了一些 cache 的新特性, 引入了实体标签, 一般被称为 e-tags, 新增更为强大的 Cache-Control 头
错误通知的管理
在 HTTP1.1 中新增了 24 个错误状态响应码, 如 409(Conflict)表示请求的资源与资源的当前状态发生冲突; 410(Gone)表示服务器上的某个资源被永久性的删除
HTTP/2.0
HTTP 协议的第四个版本是 HTTP/2.0, 相对于 HTTP/1.1 新增了以下内容:
二进制分帧
HTTP 2.0 的所有帧都采用二进制编码
帧: 客户端与服务器通过交换帧来通信, 帧是基于这个新协议通信的最小单位
消息: 是指逻辑上的 HTTP 消息, 比如请求响应等, 由一或多个帧组成
流: 流是连接中的一个虚拟信道, 可以承载双向的消息; 每个流都有一个唯一的整数标识符(12 N);
多路复用
多路复用允许同时通过单一的 HTTP/2.0 连接发起多重的请求 - 响应消息有了新的分帧机制后, HTTP/2.0 不再依赖多个 TCP 连接去处理更多并发的请求每个数据流都拆分成很多互不依赖的帧, 而这些帧可以交错 (乱序发送), 还可以分优先级最后再在另一端根据每个帧首部的流标识符把它们重新组合起来 HTTP 2.0 连接都是持久化的, 而且客户端与服务器之间也只需要一个连接(每个域名一个连接) 即可
头部压缩
HTTP/1.1 的首部带有大量信息, 而且每次都要重复发送 HTTP/2.0 要求通讯双方各自缓存一份首部字段表, 从而避免了重复传输
请求优先级
浏览器可以在发现资源时立即分派请求, 指定每个流的优先级, 让服务器决定最优的响应次序这样请求就不必排队了, 既节省了时间, 也最大限度地利用了每个连接
服务端推送
服务端推送能把客户端所需要的资源伴随着 index.html 一起发送到客户端, 省去了客户端重复请求的步骤正因为没有发起请求, 建立连接等操作, 所以静态资源通过服务端推送的方式可以极大地提升速度
来源: https://www.cnblogs.com/wupeixuan/p/8642100.html