2017-10-12 30 views
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

+1

我想你需要设置传输编码为“chunked”,否则浏览器可能会或可能不会等待完整的文件。 – allo

+0

我不确定这里有什么问题。这听起来像你有一个铬开发人员可能的错误报告? –

回答

0

将content_type从“text/plain”更改为“text/html”或删除content_type完全解决了问题 - 它使得Chrome在接收到文本后立即渲染每个文本块。

相关问题