2017-10-12 15 views
0

Il ya un an, j'ai utilisé StreamingHttpResponse de Django pour diffuser un fichier texte et Chrome a immédiatement affiché chaque morceau de texte qu'il a reçu. Désormais, avec le même code, Chrome affiche uniquement le texte lorsqu'il charge complètement le fichier texte, ce qui risque d'entraîner un dépassement de délai du serveur. Cela n'arrive pas avec Firefox.Chrome ne diffuse pas de contenu à partir StreamingHttpResponse de Django

J'ai créé un test simple:

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

Si j'accéder à ce point de vue dans Firefox, ce navigateur va afficher «C'EST .... chaque seconde pendant 15 secondes. Mais dans Chrome, le navigateur attendra 15 secondes, puis affichera tous les 'THIS IS ...', même si le serveur de développement enregistre 'LOG: THIS IS ...' une fois par seconde.

Je me demande s'il y a une subtilité dans ce problème que j'ai raté. Je vous remercie.

Python: 3.6.2.
Django: 1.10.5

+1

Je pense que vous devez définir l'encodage de transfert sur '' chunked'' sinon le navigateur peut attendre ou non le fichier complet. – allo

+0

Je ne suis pas sûr de savoir quelle est la question ici. Il semble que vous ayez un rapport de bug possible pour les développeurs de chrome? –

Répondre

0

Modification du content_type de « text/plain » à « text/html » ou le retrait du content_type résout complètement le problème - il fait Chrome rend chaque morceau de texte immédiatement après qu'il reçoit.