如何在带有cherrypy的瓶子中启用gzip压缩

时间:2014-04-06 09:50:17

标签: python gzip wsgi cherrypy bottle

bottle docs说:

  

...这是Bottle项目的建议,Gzip压缩最好由WSGI服务器处理。诸如cherrypy之类的WSGI服务器提供了一个GzipFilter中间件,可用于完成此任务。

目前,我正在运行我的瓶子服务器:

app.run(host='...', port=8080, server='cherrypy')

如何判断cherrypy使用gzip压缩?


我可以抓住像这样的cherrypy服务器对象,但我仍然无法弄清楚如何启用gzip:

class CherryPyGzip(ServerAdapter):
  def run(self, handler): 
    from cherrypy import wsgiserver
    server = wsgiserver.CherryPyWSGIServer((self.host, self.port), handler)

    # enable gzip here somehow?

    try:
      server.start()
    finally:
      server.stop()

app.run(host='...', port=8080, server=CherryPyGzip)

2 个答案:

答案 0 :(得分:3)

CherryPy有Gzip工具,但它只适用于CherryPy本机应用程序。所以你需要使用第三方Gzip WSGI中间件(wsgigzip仅用作示例,我不知道哪个中间件最好):

import cherrypy
import wsgigzip


application = wsgigzip.GzipMiddleware(bottle.default_app())

cherrypy.config.update({'server.socket_host': "0.0.0.0",
                        'server.socket_port': 8080})
cherrypy.tree.graft(application, "/")
cherrypy.engine.start()
cherrypy.engine.block()

或者更好的是,使用uWSGI作为服务器,can do gzip除了许多其他强大功能外。

答案 1 :(得分:0)

在黑暗中刺伤(因为我不熟悉CherryPy):把它放在你拥有"启用gzip的地方"评价。

cherrypy.config.update({'tools.gzip.on': True})

(灵感来自this。)

运气好吗?