介绍

压缩是提升网站性能的关键手段之一。对于某些类型的文件,最大可减少 70% 的大小,从而大幅降低带宽需求。随着时间的推移,压缩算法不断得到优化,新的高效算法也逐渐被客户端和服务器所支持。

在实际应用中,Web 开发人员通常不需要亲自实现压缩机制,因为现代浏览器和服务器已经内置了这些功能,只需做一些配置即可。

通过合理利用这些压缩机制,网站性能能够得到显著提升,用户的访问速度和带宽利用效率也会大幅改善。


文件压缩

每种数据类型都包含一定程度的冗余,这意味着有一些空间是被浪费的。

例如,文本数据通常有多达 60% 的冗余,而音频和视频等其他媒体格式的冗余比例可能更高。

与文本不同,音频和视频等媒体格式在存储数据时占用了大量空间,因此优化存储和回收空间的需求在早期就已经显现出来。为了满足这一需求,工程师们设计了专门用于这些数据类型的优化压缩算法。根据压缩的特性,文件格式使用的压缩算法可以大致分为两类:

  • 无损压缩(Lossless Compression):在无损压缩中,压缩和解压缩过程不会改变数据,解压后的数据与原始数据完全一致(字节对字节的匹配)。常见的无损压缩格式包括 GIF 和 PNG 图像格式。
  • 有损压缩(Lossy Compression):有损压缩会在压缩过程中丢弃一些数据,这些丢失的数据对于用户来说通常是不可察觉的。Web 上的许多视频格式以及 JPEG 图像格式都属于有损压缩。

对于有损压缩,通常可以根据需要调整压缩的程度,压缩越多,质量可能越差,反之则质量更高。

为了优化网站的性能,理想的做法是尽可能多地压缩文件,同时保持在可接受的质量范围内

通常情况下,有损压缩算法比无损压缩算法更高效,能够在不明显影响用户体验的情况下大幅减小文件大小。


端到端压缩

端到端压缩指的是由服务器完成的消息正文压缩,这一过程在数据从服务器到达客户端的整个传输过程中保持不变。无论经过多少个中间节点,数据的主体部分都不会被解压,直到最终到达客户端。

现代浏览器和服务器都支持端到端压缩,唯一需要协商的就是使用哪种压缩算法。目前,最常用的两种压缩算法是 gzip 和 br(即 Brotli )。

浏览器和服务器通过主动内容协商来选择使用的压缩算法。浏览器会发送一个 Accept-Encoding 头,标明其支持的算法及优先级顺序,服务器根据该信息选择一种算法,用于压缩响应体,并通过 Content-Encoding 头部告诉浏览器选用的压缩算法。

同时,为了支持缓存机制,服务器在响应中必须同时包含 Vary 头,至少包含 Accept-Encoding,以确保缓存能够区分不同编码方式的资源表示。

上图来自 Compression in HTTP - HTTP | MDN


参考

Compression in HTTP - HTTP | MDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87442.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87442.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87442.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32之循迹避障模块TCRT5000红外反射传感器

目录 一、系统概述 二、TCRT5000红外反射传感器简介 2.1 基本概述 2.2 结构与工作原理 2.2.1 物理结构 2.2.2 工作流程 2.2.3 电路原理图 2.3 电气特性 2.4 模块接口说明 2.5 典型应用电路 2.6 实际应用注意事项 三、硬件设计 3.1 硬件组成 3.2 硬件连…

新能源汽车功率级测试自动化方案:从理论到实践的革命性突破

> 在800V高压平台普及与碳化硅半导体爆发的双轮驱动下,传统测试方法正经历颠覆性变革 “当我看到工程师手动记录测试数据时,就知道这个行业需要一场革命。”——某新能源车企测试总监的深夜感慨 ## 01 新能源汽车测试的痛点与变革 当新能源汽车的**电驱系统功率密度突…

【网络编程】事件驱动 reactor 式的服务器(EPOLL机制)

文章目录业务拆解事件驱动的 reactor总流程图C 代码实现准备工作编写头文件 reactor.h准备头文件准备宏定义声明三大模块函数和基础的内存变量长度定义全局变量定义 EPOLL 实例事件处理的函数与释放资源的函数注册服务器监听套接字的函数accept_cb 模块read_cb 模块send_cb 模块…

如何做好云服务器密码管理

一、设置强密码 强密码就像是给云服务器上了一把“超级锁”。专家建议,一个强密码应该包含大写字母、小写字母、数字和特殊字符,长度至少在 12 位以上。比如说,“Abc12345678”就比简单的“123456”要安全得多。有数据显示,简单密…

《新消费模式与消费者权益保护研讨会》课题研讨会在北京顺利召开

近期,《新消费模式与消费者权益保护研讨会》课题研讨会在北京召开。来自市场监管、政法、宏观管理等部门专家参会,聚焦《消费者权益保护法》《关于以新业态新模式引领新型消费加快发展的意见》等文件精神,探讨激发市场主体活力、促进新型消费…

Gradio全解13——MCP协议详解(6)——MCP服务器构建、测试与示例大全

Gradio全解13——MCP协议详解(6)——MCP服务器构建、测试与示例大全第13章 MCP协议详解13.6 MCP服务器构建、测试与示例大全13.6.1 开发MCP天气服务器1. 天气服务器概述2. 安装Node.js并设置环境3. 构建服务器13.6.2 安装Claude for Desktop1. 安装Claud…

Windows 11 24H2 专业版/家庭版安装教程(2025年6月更新版)- U盘启动盘制作+详细步骤

准备U盘启动盘​ 下载个叫「Rufus」的免费小工具(百度搜就行)。插入一个至少8GB的空U盘(U盘会被清空,提前备份资料!)。打开Rufus,选你的U盘,ISO文件选你下载的那个 zh-cn_windows_1…

mac电脑wireshark快速实现http接口抓包

wireshark介绍 Wireshark 是一款功能强大的网络协议分析工具,可以用来抓取网络中的数据包,包括 HTTP 请求和响应。 wireshark安装 安装下载官网 https://www.wireshark.org/download.html,根据个人电脑环境下载安装wireshark使用 1配置网卡2选…

Softhub软件下载站实战开发(十二):软件管理编辑页面实现

文章目录 Softhub软件下载站实战开发(十二):软件管理编辑页面实现✨功能概述 📋编辑页面实现 🛠️1. 页面结构设计2. aieEditor集成 🌟初始化配置编辑器功能 3. 大整数处理 🔢4. 封面图片上传 &…

微服务外联Feign调用:第三方API调用的负载均衡与容灾实战

01Feign 简介 Feign 是 Spring Cloud Netflix 中的 声明式 HTTP 客户端,它如同一位贴心的信使,帮我们化繁为简,让服务间的调用变得轻松又高效。 Feign 的核心优势在于:。 • 声明式调用:开发者只需定义接口和注解&a…

k8s pod调度基础

目录 一:replication controller和replicaset 1:replication controller replication controller的使用示例。 2:标签与标签选择器 (1)标签 (2)标签选择器 (3)标签…

学习者的Python项目灵感

一、实用工具类 - 文件批量重命名工具 用 os 模块实现按规则(如添加日期、序号、替换关键词)批量重命名文件,适合处理大量图片/文档。 - 简易待办事项管理器(To-Do List) 用 tkinter 或 PyQt 做GUI界面,…

gRPC服务发现

基于 etcd 实现的服务发现,按照非规范化的 etcd key 实现,详细见代码注释。 package discoveryimport ("context""encoding/json""fmt""go.etcd.io/etcd/api/v3/mvccpb"clientv3 "go.etcd.io/etcd/client/…

基于Linux的Spark本地模式环境搭建实验指南

一、实验目的 掌握Spark本地模式的安装与配置方法验证Spark本地环境是否搭建成功了解Spark基本操作和运行原理 二、实验环境准备 操作系统:Linux(推荐ubuntu)Java环境:JDK 1.8或以上版本内存:至少4GB(推…

数学建模_时间序列

什么是时间序列时间序列预测方法/模型条件:非白噪音平稳平稳性评估不平稳变成平稳然后用ARIMA模型确定p,qAR模型(ARMA特例)MA模型(ARMA特例)ARMA模型(普适)灰色模型神经网络/LSTM组合预测模型向量数据预测结果和为1的情况什么是时间序列 省略具体图形例子 时间序列…

linux用rpm包升级sudo包为sudo-1.9.17-2版本

rpm下载地址: https://www.sudo.ws/dist/packages/1.9.17p1/ 备注:其他压缩包下载地址:https://www.sudo.ws/download.html sudo-1.9.17-2.el7.x86_64.rpm 检查一下,本地sudo版本,执行:sudo -V 或者sudo -…

【开源项目】一款真正可修改视频MD5工具视频质量不损失

文章目录 视频MD5修改工具 🎬📋 目录✨ 功能特点💻 系统要求🏗️ 设计架构🔬 技术原理💻 核心代码1. 视频MD5修改核心逻辑2. 前端异步处理代码3. 错误处理与日志记录📥 安装方法方法一:直接下载方法二:使用本地服务器📚 使用教程基本使用步骤高级使用技巧📁…

Day05: Python 中的并发和并行(1)

理解 Python 中的线程和进程 理解线程和进程是实现在 Python 中并发和并行的基础。这种知识使你能够编写能够看似同时执行多个任务的程序,从而提高性能和响应能力。本课程将深入探讨线程和进程的核心概念、它们的区别,以及它们如何为更高级的并发技术奠…

Spring Boot 集成 MinIO 实现分布式文件存储与管理

Spring Boot 集成 MinIO 实现分布式文件存储与管理 一、MinIO 简介 MinIO 是一个高性能的分布式对象存储服务器,兼容 Amazon S3 API。它具有以下特点: 轻量级且易于部署高性能(读写速度可达每秒数GB)支持数据加密和访问控制提供…

从小白入门,基于Cursor开发一个前端小程序之Cursor 编程实践与案例分析

Cursor 编程实践与案例分析 Cursor 编程实践与案例分析 1. 什么是 Cursor? Cursor 是一款面向开发者的 AI 编程助手,集成于本地 IDE,支持自然语言与代码的无缝协作。它不仅能自动补全、重构、查找代码,还能理解业务上下文&#…