我有一个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,或者在开发过程中被迫将其关闭?
发布于 2013-07-03 04:48:55
flask文档提到server must support是X-Sendfile,而werkzeug的开发服务器没有(文档中没有提到,通过werkzeug的sendfile源代码返回的grep没有返回任何匹配项)。
将此行为添加到服务器中可能并不太难,但我不太确定支持这些高级功能是否是开发服务器的优先事项。
顺便说一句,当run的额外关键字参数被传递给werkzeug的run_simple时,你不需要自己创建中间件,你只需要使用:
flaskapp.run(host='0.0.0.0', debug=True, static_files={'/static': '/path/to/static'})https://stackoverflow.com/questions/17434687
复制相似问题