一年前,我使用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
答案 0 :(得分:0)
从" text / plain"更改content_type; to" text / html"或删除content_type完全解决了问题 - 它使Chrome在收到后立即呈现每个文本块。