参考: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、使用

 from flask import Flask
from flask_compress import Compress app = Flask(__name__)
Compress(app)
 from flask import Flask
from flask_compress import Compress compress = Compress() def start_app():
app = Flask(__name__)
compress.init_app(app)
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

flask-compress的使用方法以及对应的http头Vary、Content-Encoding的意思的更多相关文章

  1. Content encoding error问题解决方法

    A few people have been experiencing the following error. UPDATE: The reason for it happening is beca ...

  2. python flask实现小项目方法

    本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走. 下载源码,运行 pip install -r requirements.txt 建立环境 python ...

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

    前提:基于纯后端服务, post 请求 (Content-Type: application/json,) 1.获取未经处理过的原始数据而不管内容类型,如果数据格式是json的,则取得的是json字符 ...

  4. Flask学习 4 http方法

    服务端端 #!/usr/bin/env python # encoding: utf-8 """ @version: v1.0 @author: cxa @file: f ...

  5. 用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 Jinja 中常用的过滤器 default float int len ...

  6. Flask—路由的注册方法

    第一种注册方法 from flask import Flask app = Flask(__name__) @app.route("/hello") # 第一种注册方法 def h ...

  7. Flask(3)- Flask 中的 HTTP 方法

    查看 app.route() 源代码 def route(self, rule: str, **options: t.Any) -> t.Callable: """ ...

  8. flask自定义处理错误方法

    自定义错误处理方法: 当客户端访问浏览器是,得到相对应的状态码,服务器通过状态码给用户相对应的页面. @app.errorhandler(404) def handle_404_error(err): ...

  9. 在pycharm_2018.2版本中开启Flask的debug的方法 (不要用命令:python **.py启动)

    断点后,先ctl+c关闭控制台程序,再点击debuger调试 问题描述:在pycharm_2018.2版本中,我明确开启了debug,代码如下所示: from flask import Flask a ...

随机推荐

  1. android 使用开源库zxing生成二维码,扫描二维码【转】

    转自:http://blog.csdn.net/qq_16064871/article/details/52422723 zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库 ...

  2. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  3. java对象内存大小评估

    Java对象的内存布局:对象头(Header).实例数据(Instance Data)和对齐填充(Padding).无论是32位还是64位的HotSpot,使用的都是8字节对齐.也就是说每个java对 ...

  4. DRF的异常处理

    默认情况下,DRF框架通过内置的 exception_handler 方法,处理了如下异常: django内置异常 Http404 PermissionDenied DRF框架异常 APIExcept ...

  5. getRequestDispatcher

    request.getRequestDispatcher("/xx/xx.jsp").forward( request, response); http://blog.csdn.n ...

  6. python基础之程序交互与数据类型

    一.程序交互 1.什么是程序交互? name=input('输入用户名:') #无论用户输入何种内容,input都会存成字符串格式 print(name) 2.为啥要有程序交互? 让计算机能够模拟人, ...

  7. Laravel项目使用腾讯云对象存储上传图片(cos-php-sdk-v5版本)

    为了加快网站访问速度.降低网站负载,现在越来越多的网站选择把图片等静态文件放在云上,这里介绍一下腾讯云对象存储在Laravel项目中的使用 1.申请腾讯云对象存储.创建Bucket.获取APPID等参 ...

  8. 【转】学一点Git--20分钟git快速上手

    看到一篇不错的Git的简单入门教程,转过来给自己留个底. 原文地址:http://www.cnblogs.com/shuidao/p/3535299.html 在Git如日中天的今天,不懂git都不好 ...

  9. Error converting bytecode to dex: Cause: java.lang.RuntimeException: Exception parsing classes

    http://blog.csdn.net/xx326664162/article/details/51859106 总算有个靠谱的了

  10. 洛谷 P1570 KC喝咖啡【二分答案/最大化平均值模板】

    题目描述 话说KC和SH在福州的时候常常跑去85°C喝咖啡或者其他的一些什么东西. 这天,KC想要喝一杯咖啡,服务员告诉他,现在有n种调料,这杯咖啡只可以加入其中的m种(当然KC一定会加入m种,不会加 ...