HTTP 1.1

对比 1.0,HTTP 1.1 主要区别主要体现在:

  • 缓存处理:在 HTTP 1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。

- 带宽优化及网络连接的使用:HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),避免带宽浪费。

- 错误通知管理:HTTP 1.1 新增了 24 个错误状态响应码,410(Gone)表示服务器上的某个资源被永久性的删除。

- Host 头处理:HTTP 1.1 的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

- 长连接:HTTP 1.1 支持长连接和请求的流水线理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection:keep-alive。

HTTP 2.0

Okhttp 支持配置使用 HTTP 2.0 协议,HTTP 2.0 相对于 Http1.x 来说提升是巨大的,主要有以下几点:

  • 二进制格式:http1.x 是文本协议,而 http2.0 是二进制以帧为基本单位,是一个二进制协议,一帧中除了包含数据外同时还包含该帧的标识:Stream Identifier,即标识了该帧属于哪个 request,使得网络传输变得十分灵活。

- 多路复用:多个请求共用一个 TCP 连接,多个请求可以同时在这个 TCP 连接上并发,一个request 对应一个 id。

- header 压缩:HTTP2.0 使用 encoder 来减少需要传输的 header 大小,通讯双方各自cache一份 header fields 表,避免了重复传输,流量消耗,提高效率。

- 支持服务端推送

https

HTTPS 的产生是为了解决 HTTP 的不安全性,它包括三个方面,机密性、完整性和身份验证。它在 HTTP 之下 TCP 之上加了一个 TLS 层。

http2

HTTP2 有三个核心概念,Strem 流、Message 消息、Frame 帧。

在一个 TCP 连接上可以有多个流,也就是并发多请求,实现多路复用;

以前浏览器是只能对一个域名开启 6 个并发链接;同时流还可以设置优先级,让服务器优先处理;一条流上可以有多个 Message 消息,每个 Message 都可以携带多个 Frame 帧,帧类型包括 HEADER 帧和 DATA 帧,也就对应于 HTTP/1.1 中的 header 和 data。在 HTTP/1.1 中,服务端是没法主动向客户端推送信息的,客户端只能以轮询的方式去请求,在 HTTP2 中有了服务器推送,也就是服务端可以提前将资源推送至浏览器缓存。

HTTP2 只在应用层解决了队头阻塞问题,并未在 TCP 层解决队头阻塞问题。

TCP 的报文传输时无序,接收时组装。如果队头包没有到达,即使后序数据包已经接收到了也是没办法交给上层应用程序处理的,只能等待重发。

http3

HTTP3 采用了 UDP,UDP 先天没有队列的概念,自然就解决了队头阻塞的问题,但是它仍然保留了 TCP 的可靠性,这也需要 QUIC 协议自己去实现重传机制、拥塞控制等机制。

https http2 http3的更多相关文章

  1. Nginx上部署HTTPS + HTTP2

    Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev(或者OpenSSL),且ln -s /usr/lib/x86_64-linux-gnu/libssl.so ...

  2. http & https & http2.0

    一.http状态码 1xx(信息性状态码,接受的请求正在处理) 2xx(成功状态码,请求正常处理完毕)200 OK204 No Content:请求成功但没有资源返回206 Partial Conte ...

  3. caddy server 默认https && http2的验证

    1. 下载     https://caddyserver.com/   注意选择应该包含的模块,此次包含了git 插件   2. 配置    使用 Caddyfile    内容如下:     ro ...

  4. 网站通信协议升级到HTTPS&HTTP2

    为何要升级到HTTPS和HTTP2? http://baijiahao.baidu.com/s?id=1602041305989767011&wfr=spider&for=pc htt ...

  5. Http缓存知识;HTTPS, HTTP2相关知识;百度统计和即时线上客服。

    安装 : 百度统计 来统计用户流量, Intercom 来做即时线上客服. 这两个是 JavaScript 插件放在 HTML 上的. HTTP缓存: https://developers.googl ...

  6. HTTP,HTTPS,HTTP2笔记

    HTTP 网络协议分层 应用层 -> HTTP FTP 为应用软件提供了很多服务 构建于TCP协议之上 屏蔽网络传输的相关细节 传输层 -> TCP UDP 向用户提供可靠的端对端的服务( ...

  7. wireshark 调试 https/http2和grpc流量

    本文浏览器以 Chrom 为例 平常需要抓包的场景比较少,记录一下防止下次忘记配置 1. 解析 TLS 在本地创建用于保存 ssl logfile 的文件(文件可以存放到任意位置), 并添加到环境变量 ...

  8. 新版startssl 免费SSL证书申请 (实测 笔记 https http2 必要条件)

    简单说明: 目前多个大型网站都实现全站HTTPS,而SSL证书是实现HTTPS的必要条件之一. StartSSL是StartCom公司旗下的.提供免费SSL证书服务并且被主流浏览器支持的免费SSL.包 ...

  9. HTTP协议图文简述--HTTP/HTTPS/HTTP2

    01.准备 1.1.先了解下网络模型/TCP HTTP 连接是建立在 TCP* 协议之上的,其数据传输功能是由TCP完成的,那TCP又是什么呢? TCP 是一个单纯用来建立通信连接,并传输数据的基础协 ...

  10. http协议之报文详解

    一. 概述 用于HTTP协议交互的信息被称为HTTP报文.请求端(客户端)的http报文叫做请求报文,响应端的叫做响应报文. 报文,是网络中交换和传输的数据单元,即站点一次性要发送的数据块.报文包含了 ...

随机推荐

  1. vue 的属性展开 props v-bind 记得带key

    <el-table-column v-for="column in columns" :key="column.prop" v-bind="co ...

  2. 基于pythondetcp多个客户端连接服务器

    壹: TCP是面向运输层的协议.使用TCP协议之前,必须先建立TCP连接,在传输完成后,必须释放已经建立的TCP连接.每条TCP连接只能有两个端,每一条TCP连接只能是点对点的.TCP提供可靠的交付的 ...

  3. git 删除本地创建的仓库常用方法

    基本方法   清除本地文件夹下的git文件,然后在重新初始化新建的git仓库 具体实施 //删除文件夹下的所有 .git 文件 find . -name ".git" | xarg ...

  4. Spring Boot 2.0 新人会踩的坑--启动报404错误

    转载自:http://www.javaman.cn/channels/sb2 启动程序,验证效果 根据图示,点击按钮,来启动 Spring Boot Web 程序, 查看控制台输出: . ____ _ ...

  5. Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR

    原文:Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR - S ...

  6. Google Chart API学习(二)

    书接上回: combo-charts: <html> <head> <script type="text/javascript" src=" ...

  7. 记录--为什么要使用 package-lock.json?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 随着JavaScript在现代软件开发中的日益重要地位,Node.js生态系统中的npm成为了不可或缺的工具.在npm管理依赖的过程 ...

  8. 记录--vue3+setup+ts 知识总结

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 vue3 于 2020 年 09 月 18 日正式发布,2022 年 2 月 7 日 vue3 成为新的默认版本 距离 vue3 正式发布 ...

  9. 深度探索.NET Feature Management功能开关的魔法

    前言 .NET Feature Management 是一个用于管理应用程序功能的库,它可以帮助开发人员在应用程序中轻松地添加.移除和管理功能.使用 Feature Management,开发人员可以 ...

  10. 把分钟数转化成几小时几分钟(100 -> 01:40)

    /// <summary> /// 把分钟数转化成几小时几分钟(100 -> 01:40) /// </summary> /// <param name=" ...