2013-07-02 3 views
1

프로덕션 환경에서 Apache에서 실행되는 Flask 애플리케이션이 있습니다. 정적 파일이 있지만 인증 된 액세스가 필요합니다. 그래서 X-sendfile을 인증 한 후 파일 전송 속도를 높이기 위해 합리적인 듯 사용 :X-Sendfile을 사용한 플라스크 개발 서버

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

을 그럼 난 응답을 생성하고있어 여기서

return flask.send_file(filepath) 

아파치에서 잘 작동하는 것 같다. 내가 개발 서버 실행할 때 문제가 : 나는 그것을 use_x_sendfile = True이 방법을 실행하면

# 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) 

을의 X-sendfile을 헤더는 실제 응답에 표시하고 빈 파일 (0 바이트) 클라이언트에 전달 . X-Sendfile을 끄고 브라우저가 캐시 된 파일을 삭제하도록 강요하면 문제가 해결되므로 Werkzeug 서버 Flask가 X-Sendfile 헤더를 처리하지 않는 것으로 보입니다. 개발 서버가 X-Sendfile을 처리 할 수있게하는 방법이 있습니까? 아니면 개발 중에 이것을 강제로 해제해야합니까?

답변

2

플라스크 문서는 server must supportX-Sendfile이, 그리고 WERKZEUG의 dev에 서버를하지 않습니다 (아무 곳이나 문서에서 언급하고 sendfile에 대한 WERKZEUG의 소스를 통해 그렙 반환 전혀 일치가 없다) 것을 언급하고있다.

서버에이 동작을 추가하는 것이 너무 어렵지는 않지만 이러한 고급 기능을 지원하는 것이 개발 서버의 우선 순위인지는 잘 모르겠습니다.

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

감사 팁을위한 : run에 추가 키워드 인수 WERKZEUG의 run_simple에 통과로

는, BTW, 당신은 사용할 수 있습니다, 미들웨어를 직접 만들 필요가 없습니다. 나는 Flask의 사이트에서'SharedDataMiddleware'를 구할 수 있습니다. – jpmc26