0
一年前,我使用Django的StreamingHttpResponse来流式传输文本文件,Chrome立即显示它接收的每一段文本。现在,使用相同的代码,Chrome仅在完整加载文本文件时显示文本,从而有可能导致服务器超时。 Firefox不会发生这种情况。Chrome浏览器不传输来自Django StreamingHttpResponse的内容
我创建了一个简单的测试:
# 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该视图,该浏览器将打印出“THIS IS ....”的每一秒的15秒。但在Chrome浏览器中,浏览器将等待15秒,然后打印出所有“这就是...”,即使开发服务器每秒记录一次“LOG:THIS IS ...”。
我不知道这个问题中是否有任何微妙之处,我错过了。谢谢。
Python:3.6.2。
Django:1.10.5
我想你需要设置传输编码为“chunked”,否则浏览器可能会或可能不会等待完整的文件。 – allo
我不确定这里有什么问题。这听起来像你有一个铬开发人员可能的错误报告? –