8、HTTP/1.0和HTTP/1.1的区别【高频】

news/2025/2/27 10:51:19
http://www.w3.org/2000/svg" style="display: none;">
  • 第一个是 长连接

    • HTTP/1.0 默认 短连接,(它也可以指定 Connection 首部字段的值为 Keep-Alive实现 长连接)
    • 而HTTP/1.1 默认支持 长连接,HTTP/1.1是基于 TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,因此最好能维持一个长连接,可以用个长连接来发多个请求。
  • 第二个是 管道化

    • 而 HTTP/1.0 不支持管道化

    • 而HTTP/1.1 支持管道 网络传输,但不是默认开启。具体内容是,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,解决了请求的队头阻塞问题,可以减少整体的响应时间

      https://i-blog.csdnimg.cn/img_convert/26dec427748d2cf05013d6f26c462a08.png" alt="管道网络传输" />

  • 第三个是 缓存控制

    • HTTP/1.0 主要使用 Expires 字段 或者 If-Modified-Since 来判断使用哪种缓存
    • 而HTTP/1.1 则引入了更多的缓存头,比如 ETag 、If-None-Match
  • 第四个是 错误处理:

    • HTTP/1.1 增加了一些新的状态码,比如 100 Continue,表示协议处理中的一种中间状态
  • 第五个是 Host 头:

    • HTTP 1.0中 没有Host头字段,
    • 而HTTP 1.1中 要求每个请求都包含 Host头字段,以 指示请求的目标主机
  • 第六个是 节约带宽:

    • HTTP 1.1 可以只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。

      • 客户端如果接受到100,才需要发送请求body。
      • 如果接收到401,客户端不用发送请求body,节约了带宽。
    • 另外HTTP1.1还支持 传送内容的一部分。也就是客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可,这是支持文件 断点续传 的基础

【注】如何优化HTTP1.1?

https://i-blog.csdnimg.cn/img_convert/d19f10561175bed1f836cb6b65de3f42.png" alt="img" />

  • 通过 缓存技术 来避免发送 HTTP 请求。客户端收到第一个请求的响应后,可以将其缓存在本地磁盘,下次请求的时候,
    • 如果缓存没过期,就直接读取本地缓存的响应数据。
    • 如果缓存过期,客户端发送请求的时候带上响应数据的摘要,服务器比对后发现资源没有变化,就发出不带包体的 304 响应,告诉客户端缓存的响应仍然有效。
  • 减少 HTTP 请求的次数,有以下的方法:
    • 将原本由客户端处理的重定向请求,交给代理服务器处理,这样可以减少重定向请求的次数;
    • 将多个小资源合并成一个大资源再传输,能够减少 HTTP 请求次数以及 头部的重复传输,再来减少 TCP 连接数量,进而省去 TCP 握手和慢启动的网络消耗;
    • 按需访问资源,只访问当前用户看得到/用得到的资源,当客户往下滑动,再访问接下来的资源,以此达到延迟请求,也就减少了同一时间的 HTTP 请求次数。
  • 压缩响应资源,降低传输资源的大小,从而提高传输效率,
    • 应当选择更优秀的压缩算法。

http://www.niftyadmin.cn/n/5869987.html

相关文章

如何在netlify一键部署静态网站

1. 准备你的项目 确保你的静态网站文件(如 HTML、CSS、JavaScript、图片等)都在一个文件夹中。通常,项目结构如下: my-static-site/ ├── index.html ├── styles/ │ └── styles.css └── scripts/└── script.js…

前端px转为rem的自适应解决方案

1.前端项目安装:npm install postcss-pxtorem --save-dev 2.在项目根目录下新增postcss.config.js文件,文件内容如下: module.exports {plugins: {postcss-pxtorem: {rootValue: 16, // 1rem 16pxpropList: [*], // 转换所有属性selector…

服务器间迁移conda环境

注意:可使用迁移miniconda文件 or 迁移yaml文件两种方式,推荐前者,基本无bug! 一、迁移miniconda文件: 拷贝旧机器的miniconda文件文件到新机器: 内网拷贝:scp -r mazhf192.168.1.233:~/miniconda3 ~/ 外…

支持自动化数据回放

以下是10个支持请求录入与回放能力的免费测试开发平台,均来自GitHub: 1. **Sharingan** GitHub地址:[https://github.com/didi/sharingan](https://github.com/didi/sharingan) 特点:基于Go语言的流量录制回放工具&…

c#笔记-基础知识

目录 整数 浮点 decimal bool 引用 object string 值 枚举 关键字 enum 类型转换 隐式转换 ​编辑 显式转换 装箱,拆箱 常量 表达式 ​编辑 字符串的使用 比较字符串 字符格式化 ​编辑 截取字符串 字符串的分割 插入字符串 删除字符串 …

DevOps全流程

DevOps全流程 面试速记 DevOps 是一种融合开与运维的软件研发实践方法,规划从需求调研到开发,测试,部署等全流程,通过Jenkins 和Kubernetes 等自动化工具集成部署实现从代码编写到部署的无缝衔接,加速软件交付周期。我…

Redis分布式缓存面试题

为什么使用分布式缓存? 1. 提升性能 降低延迟:将数据缓存在离应用更近的地方,减少数据访问时间。减轻数据库压力:缓存频繁访问的数据,减少对后端数据库的请求,提升系统响应速度。 2. 扩展性 水平扩展&a…

计算机网络之传输层(传输层的功能)

一、数据分段与重组 传输层从会话层接收数据,并将其分割成较小的数据段,以适应网络层的最大传输单元(MTU)限制。在目的端,传输层负责将这些数据段重新组合成原始数据,确保数据的完整性和正确性。 二、端口…