HTTP传输内容的压缩
最近在看尤大的ssr项目的demo,看他的项目里有用到compression,完全看不懂这是什么鬼,然后百度了一下,文档也都是英文的,看着有点吃力,隐约的觉得这是压缩http请求的,做前端的都知道,在web开发中,为了使网页加载更流畅,用户体验更好,我们都会在上线前把js,css,image,font,html等等进行压缩,使文件更小,减少带宽,节约流量,但是http压缩是什么?百度一下……然后做下笔记:
【笔记参考】:
https://www.jianshu.com/p/74c10af7707d
https://www.cnblogs.com/z-sm/p/5478495.html
在HTTP1.1开始,Web客户端可以通过Accept-Encoding头来标识对压缩的支持。浏览器发送一个请求(Request)给服务器,并用Accept-Encoding来标识支持的压缩格式(如gzip,deflate等等),服务器会将资源进行压缩,并返回给浏览器,浏览器按照相应的方式进行解析。
按照原文给的例子(原文是天猫的例子),我把我们项目进行了查看,如下图:
在HTTP请求中,我的浏览器支持压缩格式为gzip和deflate,服务器采取的gzip压缩(实际上,大多数网站都是用的gzip压缩,参考Yahoo!工程师的说法,支持gzip的浏览器范围最广,使用gzip的压缩效果最佳)
我把app.js(上面请求的js)下载下来发现,源文件大概26k多,结果传输的文件即压缩后的文件,只有7.4k,压缩了30%多,大大优化了前端性能。
以下是基本的文字描述:
一、HTTP压缩
在http协议中,可以对内容(也就是body部分)进行编码,可以采用gzip这样的编码。从而达到压缩的目的。也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。HTTP压缩,是HTTP内容编码的一种。
http压缩是指:web服务器和浏览器之间压缩传输的“文本内容”的方法。htpp采用通用的压缩算法,比如gzip来压缩html,javascript,css文件。能大大减少网络传输的数据量,提高了显示网页的速度。当然,同时会增加一点点服务器的开销。
二、HTTP压缩过程
1、浏览器发送Http request 给Web服务器,request中有Accept-Encoding:gzip,deflate(告诉服务器,浏览器支持gzip压缩)
2、Web服务器接收到request请求后,生成原始的Response,其中有原始的Content-Type和Content-Length
3、Web服务器通过Gzip,来对Response进行编码,编码后header中有Content-Type和Content-Length(压缩后的大小),并且增加了Content-Encoding:gzip,然后把Response发送给浏览器。
4、浏览器接到Response后,根据Content-Encoding:gzip来对Response进行解码。获取到原始response后,然后显示出网页。
内容编码类型
HTTP定义了一些标准的内容编码类型,并允许用扩展的形式添加更多的编码。
Content-Encoding header就用这些标准化的代号来说明编码时使用的算法
Content-Encoding值:
gzip 表明实体采用GNUzip编码
compress 表明实体采用Unix的文件压缩程序
deflate 表明实体是用zlib的格式压缩的
identity 表明没有对实体进行编码。当没有Content-Encoding header时,就默认为这种情况
gzip, compress, 以及deflate编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失。 其中gzip通常效率最高, 使用最为广泛。
http压缩对纯文本可以压缩至内容的40%,从而节省了60%的数据传输,Gzip对JPEG这类文件压缩的不够好
HTTP压缩示例,以上两个原文中都有写,后端的代码,由于本人目前是前端,还无法来操作,但是给出一种纯前端的解决方案就是,我们的项目目前打包的静态文档都是放到oss上,在oss上开启gzip压缩,即可。
以上对HTTP压缩有个初步了解,后面在逐渐后端话后做深入了解,请大家多多指教!
HTTP传输内容的压缩的更多相关文章
- HTTP 传输内容的压缩
一.HTTP压缩和内容编码的区别 HTTP压缩,在HTTP协议中,其实是内容编码的一种. 在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码. 从而达到压缩的目的 ...
- 基于WCF的RESTFul WebAPI如何对传输内容实现压缩
前言 WCF作为通迅框架可以很容易地实现对消息的压缩,且方法不止一种,主要解决方法主要有以下四种: 1.通过自定义MessageEncoder和MessageEncodingBindingElemen ...
- 关于webservice大数据量传输时的压缩和解压缩
当访问WebSerivice时,如果数据量很大,传输数据时就会很慢.为了提高速度,我们就会想到对数据进行压缩.首先我们来分析一下. 当在webserice中传输数据时,一般都采用Dataset进行数据 ...
- HttpClient与APS.NET Web API:请求内容的压缩与解压
首先说明一下,这里的压缩与解压不是通常所说的http compression——那是响应内容在服务端压缩.在客户端解压,而这里是请求内容在客户端压缩.在服务端解压. 对于响应内容的压缩,一般Web服务 ...
- .net core 3.0 Signalr - 03 使用MessagePack压缩传输内容
## MessagePack基础介绍 Signalr默认使用的是json形式传递数据,但是signalr提供了灵活的扩展,支持MessagePack形式序列化数据,以增加性能降低网络传输的效果,极大的 ...
- Linux查看文件内容和压缩文件命令
查看文件内容 一些重要的目录: /usr/share/ 帮助文档.说明文档/var/log/ 日志/var/run/ 运行中程序/var/tmp 临时文件 根 ...
- 中间人攻击破解HTTPS传输内容
最近App安全受到不小的關注,有人問我,說某某App不安全,究竟是真的還假的啊...所謂有被攻擊的風險,是不是危言聳聽,只是為了嚇人來著的? 現在就來為各位說明一下,是怎麼個不安全法.就來說說攻擊是怎 ...
- 浅谈前端性能优化(二)——对HTTP传输进行压缩
1.前端性能优化的一点: 对js.css.图片等进行压缩,尽可能减小文件的大小,减少文件下载的时间,从而减少网页响应的时间. 2.前端性能优化的另一点: 对HTTP传输进行压缩,即在js,css.图片 ...
- 前端性能优化成神之路-HTTP压缩开启gzip
什么是HTTP压缩 HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法. HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件. 能大大减少 ...
随机推荐
- Partition--分区总结
1. 在SQL SERVER 2008 R2 SP2之前版本,对分区只支持到1000个分区,之后版本支持到15000个分区.2. 分区索引对齐并不要求索引和表使用同一分区方案,但要求两者使用的分区方案 ...
- VMware下拷过来的Linux系统ifconfig下没有网络问题
拷了同事的Linux系统,拷过来时还可以用,今天再打开发现找不到ip了,于是就在网上找解决方法,因本人从没接触过Linux所以查的挺多的但解决的方法试了好几个就是不行,后面找到的有效的解决方法有: L ...
- LightOJ 1234 Harmonic Number(打表 + 技巧)
http://lightoj.com/volume_showproblem.php?problem=1234 Harmonic Number Time Limit:3000MS Memory ...
- 图形学思考 - 聊聊透视图投射矩阵perspective projective matrix
from:版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者允许不得转载. 什么是透视图投射矩阵perspective projective ...
- numpy.reshape()
数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值.
- ArchLinux 下 VirtualBox 增强设置
0.前言: 其实这个标题本来不是我的本意,因为我的ArchLinux开机启动报错了!. 原本是一个服务报错,解决就行了对不对.后来我各种搜索大法发现了一个常识错误. 1.报错: 2.过程(赶时间的朋友 ...
- 你不可不知的 React Native 混合用法(Android 篇)
前言 当前 React Native 虽说版本更新比较快,各种组件也提供的很全面了,但是在某些情况下,混合开发的方式才会快速缩短开发周期,原因无非就是原生平台的"底蕴"无疑更深,拥 ...
- TCP的坚持定时器
一.简介 TCP不对ACK报文段进行确认,TCP只确认那些包含有数据的ACK字段. 如果一个确认丢失了,双方就有可能因为等待对方而使得链连接终止: 接收方等待接受数据,因为已经向发送方通告了一个非0的 ...
- 使用vue+webpack从零搭建项目
vue到现在已经成为一个热门的框架,在项目实践当中,如果想要创建一个新项目,通常都会使用vue-cli的脚手架工具,毋容置疑能够方便很多,很多东西也不需要自己亲自去配置.都知道,脚手架其实是vue结合 ...
- Python的编码详解
一. 编码介绍 计算机只能处理数字(最底层的0和1),如果要处理文本,就必须将文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以一个字节能表示的最大整数就 ...