【问题标题】:Streaming HTTP response, flushing to the browser流式 HTTP 响应,刷新到浏览器
【发布时间】:2010-05-28 22:25:54
【问题描述】:

我有如下视图:

from django.views.decorators.http import condition

def stream():
    for i in range(0, 40):
        yield " " * 1024
        yield "%d" % i
        time.sleep(1)

@condition(etag_func=None):
def view(request):
    return HttpResponse(stream(), mimetype='text/html')

但是,它似乎根本没有流式传输。所有数据在大约 40 秒后立即转储。我怎样才能让它正确冲洗?

【问题讨论】:

  • 是的,这就是我尝试代码想法的地方,但是,它似乎对我不起作用。不知道我在这里做错了什么。
  • 你所做的完全不是标准的,只是因为某些浏览器如何实现http的细节而出现的奇迹。我想说,用一堆浏览器和不同数量的空格试试吧。最终,你可能会发现一个可远程利用的安全漏洞。

标签: django


【解决方案1】:

要使 http 流式传输工作,您的中间件、WSGI 容器和 Web 服务器(以及反向代理/负载平衡器,如果您使用 nginx+apache2 样式部署)都必须支持它。禁用中间件并删除一些层,直到它工作(任何缓存或设置 etags 的东西都出来了),然后将它们添加回来。我不知道你有什么堆栈,但 IIRC apache2 + mod_python 可以使用流式传输,尽管它不是为 Django 提供服务的推荐方式。

【讨论】:

  • 谢谢!这对我有帮助。如果是 nginx,我需要proxy_buffering off;
猜你喜欢
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
相关资源
最近更新 更多