2010-02-18 16 views
0

Après my previous question, où je pense que je l'ai réduit mon problème à le goulot d'étranglement:Comment définir l'en-tête Content-Length correct lorsque le serveur Web compresse automatiquement la sortie?

Comment définir la valeur correcte pour l'en-tête Content-Length pour un fichier téléchargeable, à partir de PHP, lorsque le serveur web (apache) compresse automatiquement la sortie après?

Je suis à la recherche de la solution la plus robuste/générique. Je ne suis pas bien informé sur la compression de sortie, mais je suppose que Apache a plusieurs algorithmes de compression qu'il peut utiliser (gzip, etc?). Ainsi, à partir de PHP, comment devrais-je automatiquement découvrir quelle compression le serveur web utilise, et comment puis-je l'utiliser pour définir la valeur d'en-tête Content-Length correcte pour la taille de fichier du fichier (après qu'il a été compressé)?

Répondre

4

Vous n'avez pas besoin pour spécifier Content-Length, Apache fait cela pour vous.

+0

C'est ce que j'ai supposé aussi, puisque Apache fait la compression, mais je ne le vois pas apparaître dans le module d'extension des en-têtes HTTP Live de FireFox. Êtes-vous sûr que c'est le cas? –

+0

@fireeyedboy: Hm, ce doit être un problème avec votre Apache. Parce que mon Apache local définit le champ * Content-Length * lors de l'utilisation de mod_deflate. – Gumbo

+2

Apache ne définira pas Content-Length s'il utilise un codage en segments, qu'il utilisera pour la sortie PHP si mod_deflate est désactivé, * ou * si la taille du contenu est supérieure au paramètre DeflateBufferSize ou si mod_deflate n'est pas en cours utilisé pour PHP dans votre configuration. – orrd

0

Peut-être la réponse de Cletus dans this question aide.

Etes-vous sûr de vouloir diffuser vos téléchargements en utilisant gzip? Zipping a beaucoup de sens pour le contenu HTML, CSS et JS, mais avec des téléchargements de fichiers énormes, je voudrais l'éteindre.

+0

* Content-Length * fait référence à la longueur du corps du message HTTP. Et si le corps du message est compressé, la valeur * Content-Length * reflète cela. – Gumbo

+0

Cheers @Gumbo, je n'étais pas sûr moi-même. –

0

Bon, alors la situation ici est que vous téléchargez un fichier. Je parie que ce fichier est déjà compressé pour vous faire économiser de la bande passante. Quoi qu'il en soit, si votre serveur a une compression active, ce n'est pas bon, car il ne passe plus de temps car le serveur ne peut pas obtenir une meilleure compression, donc pour l'accélérer, vous devez désactiver la compression de sortie pour tout téléchargement de fichier .

essayer de ces:


apache conf Désactiver mod_deflate

php.ini
output_buffering = Off
output_handler =
zlib.output_compression = Off

+0

Je ne recommanderais pas de désactiver zlib et mod_deflate pour un serveur ou un site Web entier afin de ne pas compresser les fichiers téléchargeables. – orrd