flask-compress的使用方法

参考:https://github.com/shengulong/flask-compress

1、Content-Encoding是HTTP协议的响应报文头,一般形式如:Content-Encoding:gzip,deflate,compress
  
deflate(RFC1951):一种压缩算法,使用LZ77和哈弗曼进行编码; 
  
zlib(RFC1950):一种格式,是对deflate进行了简单的封装; 
  
gzip(RFC1952):一种格式,也是对deflate进行的封装.

   可以看出deflate是最核心的算法,而zlib和gzip格式的区别仅仅是头部和尾部不一样,而实际的内容都是deflate编码的,即:
  
gzip = gzip头(10字节) + deflate编码的实际内容 + gzip尾(8字节)
  
zlib = zlib头 + deflate编码的实际内容 + zlib尾

2、flask-compress是用来压缩响应内容的,当然更好的解决方案是使用nginx做代理,使用nginx的自动压缩静态文件压缩功能,需要对nginx进行配置

工作原理:flask-compress会给http响应增加两个http头:vary、content-encoding,并压缩响应的数据。

How it works

Flask-Compress both adds the various headers required for a compressed response and gzips the response data. This makes serving gzip compressed static files extremely easy.

Internally, every time a request is made the extension will check if it matches one of the compressible MIME types and will automatically attach the appropriate headers.

3、安装 pip install flask-compress

 or, if you want the latest github version:

$ pip install git+git://github.com/libwilliam/flask-compress.gi

4、使用

1 from flask import Flask
2 from flask_compress import Compress
3
4 app = Flask(__name__)
5 Compress(app)
1 from flask import Flask
2 from flask_compress import Compress
3
4 compress = Compress()
5
6 def start_app():
7     app = Flask(__name__)
8     compress.init_app(app)
9     return app

5、选项

Within your Flask application‘s settings you can provide the following settings to control the behavior of Flask-Compress. None of the settings are required.

Option Description Default
COMPRESS_MIMETYPES Set the list of mimetypes to compress here. [
‘text/html‘,
‘text/css‘,
‘text/xml‘,
‘application/json‘,
‘application/javascript‘
]
COMPRESS_LEVEL Specifies the gzip compression level. 6
COMPRESS_MIN_SIZE Specifies the minimum file size threshold for compressing files. 500
COMPRESS_CACHE_KEY Specifies the cache key method for lookup/storage of response data. None
COMPRESS_CACHE_BACKEND Specified the backend for storing the cached response data. None
COMPRESS_REGISTER Specifies if compression should be automatically registered.
True

6、示例:

7、说下http头Vary的作用:指定Vary: Accept-Encoding标头可告诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题

参考:1、http://blog.csdn.net/fupengyao/article/details/50915526

2、http://www.webkaka.com/blog/archives/how-to-set-Vary-Accept-Encoding-header.html

8、nginx配置gzip压缩

默认情况下,Nginx的gzip压缩是关闭的,也只对只对text/html进行压缩,需要在编辑nginx.conf文件,在http段加入一下配置,常用配置片段如下:

gzip    on;
      gzip_comp_level  6;    # 压缩比例,比例越大,压缩时间越长。默认是1
     
gzip_types    text/xml text/plain text/css application/javascript
application/x-javascript application/rss+xml;     # 哪些文件可以被压缩
      gzip_disable    "MSIE [1-6]\.";     # IE6无效

9、http的vary头在nginx中的配置方法

gzip_vary on

时间: 2024-10-25 15:41:48

flask-compress的使用方法的相关文章

Flask关于request一些方法和属性的整理(持续更新)

1.flask get raw request data (获取原始数据) 可以使用request.get_data()获取未经处理过的原始数据,而不管内容类型.数据被缓存,随后可以访问 request.data , request.json ,请求如果你先访问 request.data ,它将会自动完成. 调用带有参数的 get_data 来首先解析表单数据.如果请求具有表单内容类型( multipart / form-data , application / x-www-form-urlen

No module named flask.ext.script 解决方法

把 .ext. 换成 _ 就OK了 from flask.ext.script import Manager from flask_script import Manager 原文地址:https://www.cnblogs.com/liangmingshen/p/10084300.html

Flask06 地址约定、利用falsk提供的方法渲染模板

1 访问地址约定 在访问路径的末尾是否需要加 / -> 可以加,也可以不加 前端的访问路径必须和后端的路径完全匹配才能够访问成功,如果我们在后台的路径都是以 / 结尾,但是我们的访问路径是没有以 / 结尾仍然能够访问成功的原因是后台为我们进行了重定向处理(即:当我们访问路径不以 / 结尾时,在后台的是以 / 结尾时,他们是不匹配的:此时后台就会自动将前端的请求路径重定向到后台以 / 结尾的那个路由中去,给使用者的感觉就是浏览器自动在路径的末尾添加了 / ,然而并不是这样的,真正的原理是在后台使用

用 Flask 来写个轻博客 (27) — 使用 Flask-Cache 实现网页缓存加速

目录 目录 前文列表 扩展阅读 Flask-Cache 应用 Flask-Cache 实现视图函数缓存 缓存无参数的普通函数 缓存带参数的普通函数 缓存无动态参数的视图函数 缓存带动态参数的视图函数 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 Flask 来写个轻博客 (3) - (M)VC_连接 MySQL 和 SQLAlchemy 用 Flask 来写个轻博客 (4) - (M)VC_创建数据模型和表

flask源代码笔记——路由

那flask是如何将路由与视图函数绑定的呢?在Flask类的内部是这样定义的: def route(self, rule, **options): def decorator(f): self.add_url_rule(rule, f.__name__, **options) self.view_functions[f.__name__] = f return f return decorator self.view_functions = {} def add_url_rule(self, r

Flask 测试

测试是每个应用系统发布前必须经历的步骤,自动化测试对测试效率的提高也是毋庸置疑的.对于Flask应用来说,当然可以使用Web自动化测试工具,比如Selenium等来测.Flask官方推荐的自动化测试方法是一种白盒测试,它依赖于Werkzeug的Client对象来模拟客户端.使用这个方法的好处是你不需要真的运行一个应用实例,也不依赖于任何浏览器.而测试框架就使用Python中的unittest包,对于大家上手也方便. Set Up和Tear Down方法 Set Up方法会在每个测试用例执行前被调

Flask安装

Flask依赖一些额外的库,比如Werkzeug和Jinja2.Werkzeug是WSGI的工具库.WSGI是web应用和开发与部署服务器之间的标准库.Jinja2提供模版. 有很多种方法来获取Werkzeug.Jinja2.Flask,最强大的方法是使用virtualenv. 需要python2.6或最新的,因此要确认已安装最新的python2.x. virtualenv 在开发期间,可能最想用的就是virtualenv了.如果有shell可以访问生产机器,也可能会想使用它. virtuale

Flask解读 --- 浅谈Flask基本工作流程_1

网站写了蛮长时间了,一直想具体分析分析Flask的运行机制,但是源码看得断断续续,不过最近状态不错,进度上来了点,这里先新建一个类别,专门来说说Flask和源码有关系的内容, 这篇准备粗略说一下应用Flask框架的时候,从HTTP请求开始到响应的流程 前置技能   ---   WSGI 在具体读源码之前,这里先需要说一个概念,什么是WSGI. WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,

关于flask线程安全的简单研究

flask是python web开发比较主流的框架之一,也是我在工作中使用的主要开发框架.一直对其是如何保证线程安全的问题比较好奇,所以简单的探究了一番,由于只是简单查看了源码,并未深入细致研究,因此以下内容仅为个人理解,不保证正确性. 首先是很多文章都说flask会为每一个request启动一个线程,每个request都在单独线程中处理,因此保证了线程安全.于是就做了一个简单的测试.首先是写一个简单的flask程序(只需要有最简单的功能用于测试即可),然后我们知道一个flask应用启动之后实际

Flask 学习系列(三)---Jinjia2使用过滤器

再Jinjia2中过滤器是一种转变变量输出内容的技术.··过滤器通过管道符号"|与变量链接,并且可以通过圆括号传递参数" .举例说明: {{my_variable|default('my_variable is not defined')}} my_variable 为变量,default为过滤器,my_variable is not defined是过滤器的参数.default过滤器的含义是:判断被转换的变量是否被定义过,如果没有被定义,则用字符串参数替换被转换的变量. 下面列出几个