Chrome不会从Django的StreamingHttpResponse中传输内容

时间:2017-10-12 09:21:58

标签: django gunicorn

一年前,我使用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秒,然后打印出所有“这就是...”,即使开发服务器每秒记录一次“LOG:这是......”。

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

Python:3.6.2。
Django:1.10.5

1 个答案:

答案 0 :(得分:0)

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