2009-05-28 8 views
-1

J'ai un petit script cgi qui récupère et valide un fichier de configuration pour Nagios. Le temps d'exécution typique est de plusieurs minutes, et j'aimerais avoir des retours dans le navigateur pendant la course.Est-il possible d'obtenir une sortie de navigateur Web sans tampon?

Pour illustrer ce que je voudrais arriver, considérez ceci:

#!/bin/sh 
echo "Content-type: text/plain" 
echo 

for i in A B C D E 
do 
     echo $i 
     sleep 10 
done 

Quand je fais une requête GET sur ce script via telnet ou avec wget, la sortie est une ligne à la fois, avec dix secondes d'intervalle ("A" ... "B" ... "C" ... et ainsi de suite). Lorsque j'essaie de l'ouvrir dans un navigateur commun, le navigateur semble tout mettre en tampon et présenter la sortie lorsque le script est terminé (50 secondes de silence ... "ABCDE").

Est-il possible de rendre le navigateur présente les données à l'utilisateur dès qu'il est arrivé?

Répondre

2

Je crois que ce que vous voulez, c'est utiliser "html chunk encoding". Cela permet au serveur d'envoyer au navigateur un "morceau" de code HTML qu'il peut commencer à afficher. ASP & ASP.Net prend soin de cela pour vous chaque fois que vous utilisez "Response.Write".

Voici quelques références:

+0

Exactement ce que je cherchais, merci David! –

1

Utilisez Wireshark.

+0

Merci pour le conseil, sniffing m'a fait réaliser que l'encodage gzip/deflate a fait que le serveur envoie la sortie entière dans un paquet. Après la désactivation de l'en-tête Accept-Encoding, les données arrivent sous la forme de plusieurs paquets. Le comportement du navigateur est cependant le même - rien n'est affiché jusqu'à ce que la connexion soit fermée. –