【问题标题】:Chrome does not stream content from Django's StreamingHttpResponseChrome 不会从 Django 的 StreamingHttpResponse 流式传输内容
【发布时间】:2017-10-12 09:21:58
【问题描述】:

一年前,我使用 Django 的 StreamingHttpResponse 流式传输文本文件,Chrome 立即显示它收到的每一块文本。现在,使用相同的代码,Chrome 仅在完全加载文本文件时才显示文本,因此存在服务器超时的风险。 Firefox 不会发生这种情况。

我创建了一个简单的测试:

# views.py
import time
from django.views import generic

class TestEditView(generic.TemplateView):
    def generator(self):
        for _ in range(15):
            time.sleep(1)
            yield 'THIS IS {}\n'.format(_)
            print('LOG: THIS IS {}\n'.format(_))

    def get(self, request, *args, **kwargs):
        return StreamingHttpResponse(self.generator(),
          content_type="text/plain; charset=utf-8")

如果我在 Firefox 中访问该视图,该浏览器将每秒打印出“这是……”,持续 15 秒。但是在 Chrome 中,浏览器会等待 15 秒,然后打印出所有的 'THIS IS...',即使开发服务器每秒记录一次 'LOG: THIS IS...'。

我想知道我错过了这个问题是否有任何微妙之处。谢谢。

Python:3.6.2.
Django:1.10.5

【问题讨论】:

  • 我认为您需要将传输编码设置为chunked 否则浏览器可能会或可能不会等待完整的文件。
  • 我不确定这里的问题是什么。听起来您可能有针对 chrome 开发人员的错误报告?

标签: django gunicorn


【解决方案1】:

将 content_type 从 "text/plain" 更改为 "text/html" 或删除 content_type 可以完全解决问题 - 它会使 Chrome 在收到文本后立即呈现每个文本块。

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2017-11-08
    • 2011-01-30
    • 2017-11-24
    • 2014-05-04
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多