2017-10-12 4 views
0

1年前にDjangoのStreamingHttpResponseを使用してテキストファイルをストリーミングし、Chromeは受信したテキストをすべてすぐに表示しました。同じコードでは、テキストファイルが完全に読み込まれたときにのみテキストが表示されるため、サーバーのタイムアウトが発生する可能性があります。これはFirefoxでは起こりません。ChromeはDjangoのStreamingHttpResponseのコンテンツをストリーミングしません

私は簡単なテストを作成しました:私はFirefoxでそのビューにアクセスした場合、そのブラウザは、15秒間の各2番目の「THIS ISは....」プリントアウトします

# 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") 

を。しかし、Chromeでは、ブラウザは15秒待ってから、開発サーバーが「LOG:THIS IS ...」を1秒に1回ログしても、「THIS IS ...」のすべてを印刷します。

この問題で私が逃した微妙なことがあるのだろうかと思います。ありがとうございました。

Python:3.6.2。
ジャンゴ:1.10.5

+1

私は転送コードを '' chunked''に設定する必要があると思います。そうしなければ、ブラウザは完全なファイルを待っているかもしれません。 – allo

+0

私はここで何が問題なのか分かりません。クローム開発者のバグレポートがあるようですね。 –

答えて

0

「text/plainの」へ「text/htmlの」からCONTENT_TYPEを変更するか、完全にCONTENT_TYPEを削除するには、問題を解決 - それは受け取った後にクロムはすぐにテキストの各チャンクをレンダリングします。

関連する問題