【计算机网络】HTTP 版本

如何查看http 版本?

  1. 请求头

    http2.0

    对于 HTTP,有两个主要的 scheme:

    • http:表示使用标准的超文本传输协议 (HyperText Transfer Protocol) 来访问资源。默认情况下,HTTP 使用端口 80。
    • https:表示使用安全的超文本传输协议 (HyperText Transfer Protocol Secure),即带有加密的 HTTP,来访问资源。HTTPS 使用 SSL/TLS 加密技术确保数据传输的安全性,默认端口是 443。

    http1.1

    • Accept :客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。
      • */*:表明户端可以接受任何格式的数据。
    • Accept-Encoding:说明自己可以接受哪些压缩方法
  2. window.chrome.loadTimes()

HTTP协议版本

http/0.9

特点 : HTTP 0.9是第一个版本的HTTP协议,已过时

  • 组成极其简单,仅支持GET方法。
  • 不支持请求头。无HTTP头部(Header)、状态码或错误处理。
  • 响应只能是纯文本(HTML),不支持其他格式。
  • 具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。

http/1.0

  1. 增加了 POST 请求
  2. 新增了请求头、http 状态码
  3. 新增 Cookie(有了状态)
  4. 根据Content-Type 可以支持多种数据格式(图像、音频、视频等二进制文件)
  5. 引入cache缓存机制

1.0版本存在的问题:短链接、队头阻塞

  • 短链接:每个TCP连接只能发送一个请求,当服务器响应后就会关闭这个TCP连接,下一次请求需要再次建立TCP连接。每次建立、释放TCP连接需要三次握手四次挥手,所以当网页需要发送多个HTTP请求时,就会造成性能问题。

  • 队头阻塞:TCP的主要作用是以正确的顺序将整个字节流从一个端点传输到另一个端点,但是下一个请求必须在前一个请求响应到达之前才能发送,若前一个请求响应一直不到达,那下一个请求就不发送,同样后面的请求也被阻塞了。

http/1.1

  1. 新增 keep-alive 长连接

    http1.1允许在请求时增加请求头connection:keep-alive, 这样便允许后续的客户端在一段时间内复用 之前的TCP 连接。通过⼀个 TCP 连接传输多个请求和响应 ,减少了连接建⽴和关闭的时间。避免了每次都要进行三次握手。(1.1默认有长链接,1.0需要手动的添加connection: keep-alive才能保持长链接)

  2. 新增 pipeline 管道

    基于长连接的基础,管道化可以不等第一个请求响应继续发送后面的请求 ,但响应的顺序还是按照请求的顺序返回 。但是各个请求之间存在依赖关系,一个请求出错,后面的请求都失败

  3. 增加了 PUT, DELETE, OPTIONS、 PATCH 等新方法

  4. 增强缓存处理

    新增响应头 cache~control, 用于实现客户端缓存。新增了一些缓存的字段 (If-Modified-Since,If-None-Match)。

  5. 请求头中引入了range字段,支持文件断点续传

    在上传/下截资源时,如果资源过大,将其分割为多个部分,分别上传/下载,如果遇到网绍故障,可以从已经上传/下载好的地方继续请求,不用从头开始,提高效率。返回码是206

  6. 允许响应数据分块(chunked),利于传输大文件

    采用"流模式 "(stream),取代"缓存模式 "(buffer) 只要请求或回应的头信息有Transfer-Encoding字段,就表明响应将由数量未定的数据块组成。

  7. 强制要求Host头,指定服务器的域名

http/2.0

  1. 二进制分帧

    HTTP1.1 版本的头部信息是文本,数据部分可以是文本也可以是二进制。HTTP2.0 版本的头部和数据部分都是二进制,且统称为帧。每帧有自己的标识序号,即便被随意打乱也能在另一端正确组装。

  2. 支持多路复用

    废弃了HTTP1.1 中的管道,同一个TCP连接里面,客户端和服务器可以同时发送多个请求和多个响应,并且不用按照顺序来。正如上面二进制分帧所说,每帧有自己的标识序号,即便被随意打乱也能在另一端正确组装。因此服务器不用按顺序来处理响应,也能得到正确的数据,所以避免了 HTTP 的"队头堵塞"的问题

  3. 支持头部压缩

    http2.0通过字典的形式,将头部中的常见信息替换为更少的字符,极大的减少了头部的数据量,从而实现更小的传输量。

  4. 服务端主动推送:允许服务器主动向客户推送数据

    允许服务器在响应主请求(如HTML)时,主动预测并推送相关静态资源(如CSS、JS),而无需等待客户端解析HTML后再发起请求。

  5. 数据流:服务器以流 stream 流的形式向客户端返回内容。

http/3.0

  • http协议的历史性革命性大改版,将底层TCP协议改为UDP,彻底解决队头阻塞问题。
  • 缺点:兼容性还不行,不能大规模使用。

为了解决队头阻塞问题,Google就另起炉灶搞了一个基于UDP协议的QUIC协议,并且使用在了HTTP/3上。

HTTP协议在传输层是使用了TCP进行报文传输,建立连接需要进行3次握手。QUIC的握手连接更快,因为它使用了UDP作为传输层协议,这样能够减少三次握手的时间延迟。

  • 使用UDP协议,不需要三次连接进行握手,而且也会缩短 TLS(HTTPS) 建立连接的时间。
  • 解决了 TCP 队头阻塞问题。
  • 实现动态可插拔,在应用层实现了拥塞控制算法,可以随时切换。
  • 报文头和报文体分别进行认证和加密处理,保障安全性。
  • 连接能够平滑迁移。

连接平滑迁移指的是,你的手机或者移动设备在4G信号下和WiFi等网络情况下切换,不会断线重连,用户甚至无任何感知,能够直接实现平滑的信号切换。

参考:

HTTP协议版本的发展(HTTP/0.9、1.0、1.1、2、3)-CSDN博客

【计算机网络】HTTP 版本_chrome.loadtimes-CSDN博客

相关推荐
(Charon)2 小时前
【C语言网络编程】HTTP 客户端请求(基于 Socket 的完整实现)
网络·网络协议·http
集成显卡3 小时前
Rust 实战三 | HTTP 服务开发及 Web 框架推荐
开发语言·前端·http·rust·web
拾光拾趣录1 天前
常见 HTTP 请求头:从“为什么接口返回乱码”说起
前端·http
zc-code1 天前
HTTP性能优化实战:从协议到工具的全面加速指南
网络·网络协议·http·缓存·性能优化·html
-XWB-2 天前
【安全漏洞】防范未然:如何有效关闭不必要的HTTP请求方法,保护你的Web应用
服务器·网络·http
sx2436942 天前
day33:零基础学嵌入式之网络——TCP并发服务器
网络·网络协议·http
java叶新东老师2 天前
spring gateway 配置http和websocket路由转发规则
spring·http·gateway
林深的林3 天前
Http证书体系及证书加密流程(通信流程)
网络协议·http·https
自由鬼3 天前
Apache HTTP Server 2.4.49 的目录遍历漏洞CVE-2021-41773
网络协议·http·apache