【问题标题】:Windows, Flask and Cherrypy as WSGI server - gzip compression does not workWindows、Flask 和 Cherrypy 作为 WSGI 服务器 - gzip 压缩不起作用
【发布时间】:2020-01-10 03:43:09
【问题描述】:

我正在公司运行一个较旧的应用程序,由于内部政策和应用程序需要,它必须在 Windows7 上运行。应用由 Flask 0.12.4 组成,WSGI 服务器为 Cherrypy 17.4.1。我成功运行了这个应用程序,但我想打开 GZIP 压缩,但我做不到。我浏览了几个文档和代码示例,但没有任何效果。应用只适用于内网,所以我无法使用一些在线工具对其进行测试。

我的cherrypy配置:

import os
import cherrypy
from machines import app

path   = os.path.abspath(os.path.dirname(__file__))
config = {
  'global' : {
    'server.socket_host' : '0.0.0.0',
    'server.socket_port' : 5000,
    'server.thread_pool' : 10,
    'log.screen':True,
    'log.error_file': './log/cherry_error.log',
    'environment': 'production',
  },
  '/static' : {
    'tools.gzip.on'       : True,
    'tools.staticdir.on'  : True,
    'tools.staticdir.dir' : os.path.join(path, 'static'),
    'tools.gzip.mime_types': ['text/*', 'application/*'],
  }
}


if __name__ == '__main__':    
    cherrypy.tree.graft(app.wsgi_app, '/')
    cherrypy.config.update(config)       
    cherrypy.engine.start()

我已经使用 firefox 和 chrome 开发者工具测试了提供的文件,但它声称没有 GZIP 压缩。

使用 curl 似乎是一样的:

curl --head --compressed http://192.168.1.4:5000/static/style.css
HTTP/1.1 200 OK
Content-Length: 68506
Content-Type: text/css; charset=utf-8
Last-Modified: Sat, 07 Sep 2019 14:55:52 GMT
Cache-Control: public, max-age=43200
Expires: Sun, 08 Sep 2019 04:54:20 GMT
ETag: "1567868152.63-68506-1294405540"
Date: Sat, 07 Sep 2019 16:54:20 GMT
Accept-Ranges: bytes
Server: 0.0.0.0

确实,没有它我也可以生活,但我真的很好奇这里出了什么问题。如果有人可以建议我,我将非常感激。

【问题讨论】:

    标签: python windows flask wsgi cherrypy


    【解决方案1】:

    你不能覆盖/static 路径,因为所有/ 都被委托给了Flask,你也不能应用工具。来自 CherryPy 文档的高级一章中的Host a foreign WSGI application in CherryPy section

    重要

    您不能将工具与外部 WSGI 应用程序一起使用。

    您必须使用单独的路径(例如 /site)来为 Flask WSGI 应用程序提供服务,并硬编码 /static 作为模板中静态资源的基本路径。

    在将 Flask 服务器推送到生产环境时,您确实希望从 CDN 或专用 HTTP 服务器(如 nginx)提供静态资源,而不是通过 Flask 或 CherryPy。例如,您可以简单地将 nginx 配置为始终通过压缩直接从磁盘提供 /static,同时从 WSGI 提供任何剩余路径。

    【讨论】:

    • 嗨 Martijn,谢谢我没有注意到这个“你不能使用外国 WSGI 应用程序的工具”。所以我想我被困在这里了。至少我知道为什么。当然 Nginx 是常见 Web 应用程序的默认选择......我到处都在使用它,但这是 Intranet 应用程序,我的可能性有限。我尝试为 Windows 安装 Nginx,但性能真的很糟糕,我不知道为什么。无论如何谢谢你。
    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2017-03-20
    • 2018-04-19
    • 2015-10-10
    相关资源
    最近更新 更多