带有X-Sendfile的Flask开发服务器

时间:2013-07-02 19:55:44

标签: python flask werkzeug x-sendfile

我有一个Flask应用程序,它将在Apache生产中运行。我有一些静态文件,但它们需要经过身份验证的访问。因此,使用X-Sendfile在验证后加速文件传递似乎是合理的:

flaskapp = flask.Flask()
flaskapp.use_x_sendfile = True

然后我在哪里产生回复:

return flask.send_file(filepath)

它似乎在Apache下工作正常。问题是当我运行开发服务器时:

# Use SharedDataMiddleware to deliver JS, CSS, icons, etc.
flaskapp.wsgi_app = SharedDataMiddleware(flaskapp.wsgi_app, {'/static': '/path/to/static'})
flaskapp.run(host='0.0.0.0', debug=True)

当我使用use_x_sendfile = True以这种方式运行时,X-Sendfile标头显示在实际响应中,并且空文件(0字节)被传递到客户端。关闭X-Sendfile(并强制浏览器丢弃缓存的文件)可以解决问题,因此Werkzeug服务器Flask运行时似乎没有处理X-Sendfile头。有没有办法让开发服务器能够处理X-Sendfile,还是我在开发过程中被迫关闭它?

1 个答案:

答案 0 :(得分:2)

烧瓶文档提到server must support X-Sendfile和werkzeug的开发服务器没有(文档中没有任何提及,并且通过werkzeug的sendfile来源的grep返回no匹配)。

将此行为添加到服务器可能不会太难,但我不确定支持此类高级功能是否是开发服务器的优先级。

顺便说一下,当run的其他关键字参数传递给werkzeug的run_simple时,您不需要自己创建中间件,只需使用:

flaskapp.run(host='0.0.0.0', debug=True, static_files={'/static': '/path/to/static'})