HTTP

Posted lime2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP相关的知识,希望对你有一定的参考价值。

1. HTTP历史

HTTP历史及其功能:

  • 1991:HTTP/0.9
    • 只接收GET方法,不支持请求头;
  • 1996:HTTP/1.0
    • 基本成型,支持富文本、header、状态码、缓存等等;
  • 1999:HTTP/1.1
    • 支持连接复用、分块发送;
  • 2009:SPDY
    • HTTP/2前身
  • 2013:QUIC
    • 第三代协议,基于UDP实现TCP+HTTP/2并优化;
  • 2015:HTTP/2
    • 第二代协议,多路复用、头部压缩、服务器推送等等;
  • 2018:HTTP/3
    • QUIC更名为HTTP/3

Google在2009年设计了基于TCP的SPDY,但并未通过,但SPDY的开发组全程参与HTTP/2的制定过程,参考了SPDY的很多设计。

由于TCP相较于UDP在传输效率上天然的劣势,Google于2013年开发了基于UDP的名为QUIC(Quick UDP Internet Connections)的传输层协议,希望其可以替代TCP,使得网页数据传输更加高效。后经提议,互联网工程任务组正式将基于QUIC协议的HTTP重命名为HTTP/3。

2. HTTP协议

HTTP(Hyper Text Transfer Protocol,超文本传输协议),是用于万维网浏览器的传输协议。

2.1 HTTP/0.9

第一个版本的HTTP协议。

协议特性:

  • 无状态;
  • 仅支持客户端发送GET请求,不支持请求头;
  • 由于没有协议头,其仅能传输超文本;
  • 无错误返回码;
GET /index.html

2.2 HTTP/1.0

第二个版本的HTTP协议

新增功能:

  • 支持HEAD、GET、POST请求;
  • 支持长连接、缓存机制(cache)及身份认证(authorization);
  • 请求与响应支持头域(HTTP header);
  • 响应对象以响应状态行开始;
  • 响应对象不局限于超文本;
  • 状态码(status code)、多字符集支持、多部分发送、内容编码(content encoding)等;
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: */*

要求:头信息必须是ASCII码,后面数据可以是任何格式。

2.3 HTTP/1.1

第三个版本的HTTP协议,目前使用最为广泛的协议版本。

新增内容:

  • 支持OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法;
  • 管道机制;
  • Content-Length 字段;
  • 分块传输编码;

协议特性:

  • 默认为长连接;
  • 提供范围请求功能;
  • 提供虚拟主机功能(HOST域);
  • 新增缓存处理字段;
  • 错误通知的管理;

存在队头阻塞问题。

2.4 SPDY协议

2009年谷歌公开自行研发的SPDY协议,解决了HTTP/1.1效率不高的问题。

2.5 QUIC协议

QUIC基于UDP,并结合TCP、TLS和HTTP/2

QUIC优点:

  • 零RTT建立连接;
  • 连接迁移(不在依赖于TCP连接中使用的四元组);
  • 队头阻塞/多路复用;
  • 拥塞控制;
  • 热插拔;
  • 流量控制;

2.6 HTTP/2

第四个版本的HTTP协议。

新增内容:

  • 二进制分帧;
  • 多路复用;
  • 头部压缩;
  • 请求优先级;
  • 服务端推送;

头信息和数据体均为二进制,统称为

2.7 HTTP/3

以上是关于HTTP的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段

如何从一个片段导航到另一个片段?

这两个代码片段有啥区别?

超级有用的9个PHP代码片段

postman 自动生成 curl 代码片段

postman 自动生成 curl 代码片段