【发布时间】: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 开发人员的错误报告?