Impossible de renvoyer la réponse HTTP au client HTTP: il semble que l’utilisateur ait cliqué sur le bouton «Stop» dans son navigateur.

Le problème auquel je suis confronté est:

J’émets une demande de navigateur via ajax et envoie la demande de traitement, une fois l’appel ajax effectué, je montre une fenêtre avec la barre de progression, la fenêtre contextuelle rest à peu près n’importe où entre 2 et 4 minutes et se ferme brusquement. Quand je vois la demande via l’onglet du réseau chrome, je vois que cette demande est bloquée pour la même durée pour laquelle la fenêtre contextuelle s’affiche. Je vois que la logique s’exécute en arrière-plan comme prévu mais la fenêtre n’a pas attendu la réponse et se ferme avant qu’elle soit supposée.

J’ai défini le niveau de journalisation à 7 et je vois les informations ci-dessous

S’il y a 50 enregistrements à traiter, je vois ces informations avant que chacun de ces 50 enregistrements ne commence le traitement (c’est-à-dire que je vois la ligne ci-dessous 50 fois)

[pid = 29768 thr = 70024879087720 file = abstract_request_handler.rb: 472 time = 2016-08-30 08: 06: 43.250]: Acceptation d’une nouvelle requête sur le socket principal

et enfin je vois ça

[pid = 29571 thr = 139782938920704 file = ext / nginx / HelperAgent.cpp: 923 time = 2016-08-30 08: 10: 32.682]: impossible de renvoyer la réponse HTTP au client HTTP: il semble que l’utilisateur ait cliqué sur le bouton ‘Stop’ dans son navigateur.

Je soupçonne que c’est un problème de délai d’attente, mais je ne sais pas si c’est au niveau des passagers ou au niveau ngnix.

J’ai essayé de définir différents parameters de délai ngnix sur une valeur supérieure, mais cela n’aide pas.

proxy_read_timeout 400s; client_body_timeout 180s; keepalive_timeout 180s; client_header_timeout 180s; **I suspect it might be some issue with passenger config, but not sure.** 

Quelqu’un peut-il s’il vous plaît laissez-moi savoir ce que je peux faire pour que la demande continue sans se terminer brusquement

C’est un téléchargement de fichier? Pour le téléchargement, j’utilise l’emplacement associé

 proxy_buffering off; proxy_request_buffering off; chunked_transfer_encoding on; client_body_timeout 3600; proxy_read_timeout 900; 

Pour le téléchargement de fichier, j’utilise

 client_max_body_size 10m; client_body_timeout 600s; 

(attention, si vous revenez à un emplacement dans l’emplacement associé, il doit être défini au premier emplacement)

Ou une sorte d’événement sur http? Avec un morceau? Rester en vie ? Pour le morceau j’utilise:

 proxy_buffering off; proxy_buffer_size 4k; proxy_request_buffering off; proxy_cache off; underscores_in_headers on; 

(pour plus d’informations sur le bloc, NGINX a corrigé un ancien bogue dans la version 1.11.2 s’il contenait des directives sub_filter)

Dans votre navigateur, dans la fenêtre Débogage de l’onglet Réseau, quelle est l’erreur ou l’état affiché après l’échec de la demande?
Code d’état et / ou en-tête Reponse?
Parfois, il peut également y avoir une réponse / information dans Aperçu.

D’après votre question, il n’est pas très clair qui met effectivement fin à la demande – le navigateur, nginx ou même le passager lui-même.

La meilleure pratique pour garantir qu’une connexion HTTP de longue durée ne sera pas récupérée et fermée de manière prématurée consiste à s’assurer que certaines petites données sont toujours envoyées via la connexion à certains intervalles, par exemple, en envoyant quelques espaces ou commentaires. toutes les 90 secondes (ou certains), et voir si cela résout le problème.