HTTP 笔记与总结(8)HTTP 与内容压缩
以环球网的一篇新闻为例,抓包图:

(Powered-By-ChinaCache:HIT from 060120b3g7.16 表示当前页面不是来自环球网的主服务器,而是来自中国的缓存服务器节点,HIT 表示命中,from 表示命中了哪一台服务器)
Content-Length:8306
当把当前页的源代码复制到 html 文件中,会发现文件的大小大于 Content-Length 显示的字节数。
原因在于 Content-Encoding:gzip 这个响应头信息。
为了加快网页在网络上的传输速度,服务器对主体信息进行压缩,例如 gzip 压缩、deflate 压缩、compress 压缩(Linux 服务器下)、google Chrome 的 sdch 压缩。
服务器对网页进行压缩,压缩过的内容返回给客户端,Content-Length 是压缩后的长度,客户端接受以后进行解压缩,再进行页面的渲染。
在 Apache 上打开压缩模块(启用压缩功能)
① 在 httpd.conf 中开启 deflate 模块或 gzip 模块

② 在 httpd.conf 文件中添加:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 6 #压缩率,可选1-0, 6是建议值
AddOutputFilterByType DEFLATE text/plain #压缩文本文件
AddOutputFilterByType DEFLATE text/html #压缩 html 文件
AddOutputFilterByType DEFLATE text/xml #压缩 xml 文件
AddOutputFilterByType DEFLATE text/css #压缩 css 文件
AddOutputFilterByType DEFLATE text/javascript #压缩 js 文件
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php #压缩 php 文件
AddOutputFilterByType DEFLATE image/svg+xml
</ifmodule>
因为压缩会消耗 CPU 资源,另外比如图片/视频的压缩效果不明显,因此要指定文件类型来压缩,一般压缩文本格式的文件。
【例】
cache-01.html
压缩之前:

Content-Length:187
压缩之后:

Content-Length:152
在 HTTP 请求头信息中,Accept-Encoding 会表明当前浏览器(客户端)支持的压缩格式,这种头信息一般又叫做协商头信息:

在做采集功能时,可以不发送 Accept-Encoding 信息,这样采集到的直接是源码,也可以采集 gzip ,提高速度,再用 php 解压 gzip 的内容。
HTTP 笔记与总结(8)HTTP 与内容压缩的更多相关文章
- 07 http内容压缩
一:http内容压缩 思考: Content-Length在之前的学习中,我们知道,代表返回的主体的长度 但此处,为什么返回的主体长度和content-length不一致呢? 原因在于: Conten ...
- Android学习笔记(二十)——自定义内容提供器
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 如果我们想要实现跨程序共享数据的功能,官方推荐的方式就是使用内容提供器,可以通过新建一个类去继承 Conten ...
- Dos学习笔记(2)dos屏幕内容的复制
方法1,选择复制,右键dos屏幕=>标记=>然后选择开始复制的地方,拖动覆盖要复制的内容,好了之后,按回车键(Enter). 方法2,全部复制,右键dos屏幕=>全选=>然后回 ...
- JavaScript学习笔记——DOM_对document对象的内容、属性、样式的操作
javascript-对文档对象的内容.属性.样式的操作 一.操作内容 1. innerHTML 用来设置或获取对象起始和结束标签内的内容(识别html标签) 2. innerText 用来设置或获取 ...
- php学习笔记:读取文档的内容,利用php修改文档内容
直接上代码 <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/9/10 0010 * Time: 20:27 ...
- 【读书笔记】iOS网络-HTTP-请求内容
一,GET方法. 从服务器获取一段内容,用HTTP术语来说就是实体.GET请求通常不包含请求体,不过也是可以包含的.有些网络缓存设施只会缓存GET响应.GET请求通常不会导致服务器端的数据变化. 二, ...
- cocos2d-x笔记4: TextField不能删除内容,以及我的解决办法。。。
3.0正式版,win32下,TextField按下backspace键不能删除内容.网上搜了下,很早就有的问题了,正式版了竟然还不解决... 真心无力吐槽啊!!!这种巨大而又明显的Bug... 从昨天 ...
- Android(java)学习笔记253:ContentProvider使用之内容观察者02
下面通过3个应用程序之间的交互说明一下内容观察者: 一. 如下3个应用程序为相互交互的: 二.交互逻辑图: 三.具体代码: 1. 16_数据库工程: (1)数据库帮助类BankDBOpenHelp ...
- Android(java)学习笔记252:ContentProvider使用之内容观察者01
1. 内容观察者 不属于四大组件,只是内容提供者ContentProvider对应的小功能. 如果发现数据库内容变化了,就会立刻观察到. 下面是逻辑图: 当A应用中银行内部的数据发生变化的 ...
随机推荐
- 【读书笔记】读《JavaScript设计模式》之代理模式
一.定义 代理是一个对象,它可以用来控制对另一个对象的访问.它与另外那个对象实现了同样的接口,并且会把任何方法调用传递给那个对象.另外那个对象通常称为本体.代理可以代替其实体被实例化,并使其可被远程访 ...
- Android UI组件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- mysql:表注释和字段注释
mysql:表注释和字段注释 1 创建表的时候写注释 create table test1 ( field_name int comment '字段的注释' )comment='表的注释'; 2 修改 ...
- Eclipse快捷键及各种设置(转载)
1.提示键配置一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项 ...
- oracle 10g 学习之基本 SQL SELECT 语句(4)
本篇文章中,对于有的和MSSQL Server相同的语法我就没有再写了,这里我只写Oracle和MSSQL Server有点不同的 定义空值 l 空值是无效的,未指定的,未知的或不可预知的值 l ...
- Grid画边框
public class GridHelper { //请注意:可以通过propa这个快捷方式生成下面三段代码 public static bool GetShowBorder(DependencyO ...
- Java Hour 22 I/O
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. I/O InputStream, OutStream, Reader, Wri ...
- html 表单 dom 注意跟表单的name值一致
html 表单 dom 注意跟表单的name值一致 <script type="text/javascript"> function checkForm() { var ...
- C语言标量类型(转)
在C语言中,枚举类型.字符型和各种整数的表示形式统一叫做标量类型. 当在C表达式中使用标量类型的值时,编译器就会自动将这些标识符转换为整数保存. 这种机制的作用是,在这些标量类型上执行的操作与整型上执 ...
- WCF的创建及其服务配置
1 开发环境VS2010,我们可以通过,“WCF服务库”.“WCF服务应用程序”,这里说“WCF服务应用程序”的方式. 2 如下 ① ② 先把项目中的"IService1.cs", ...