it-swarm-fr.com

Est-il possible d'activer la compression http pour les requêtes?

Je vois beaucoup d'informations sur l'activation de la compression http pour les réponses du serveur, mais qu'en est-il pour les demandes entrantes. Ne serait-il pas logique que les navigateurs compressent les publications de formulaire volumineuses avant de les envoyer au serveur?

Un autre exemple est un service Web REST que nous utilisons. Nous devons envoyer des demandes PUT fréquentes avec de gros fichiers XML (10+ Mo) et nous verrions certainement des avantages de bande passante/vitesse des deux côtés.

Est-ce donc un problème résolu côté serveur ou chaque application Web doit-elle le gérer individuellement?

35
Mike L

Pour PUT les données compressées sur le serveur, vous devez compresser le corps de la demande et définir le Content-Encoding: gzip entête. L'en-tête lui-même doit être décompressé. Il est documenté dans mod_deflate :

Le module mod_deflate fournit également un filtre pour décompresser un corps de requête compressé gzip. Pour activer cette fonction, vous devez insérer le filtre DEFLATE dans la chaîne de filtrage d'entrée à l'aide de SetInputFilter ou AddInputFilter.

...

Maintenant, si une requête contient un en-tête Content-Encoding: gzip, le corps sera automatiquement décompressé. Peu de navigateurs ont la possibilité de compresser les corps des requêtes. Cependant, certaines applications spéciales prennent en charge la compression des demandes, par exemple certains clients WebDAV.

Et un article le décrivant est ici :

Alors comment tu fais? Voici un texte de présentation, toujours à partir du code source mod_deflate: ne fonctionne que sur demande principale/pas de sous-demandes. Cela signifie que tout le corps de la requête doit être compressé par gzip si nous choisissons de l'utiliser, il n'est pas possible de compresser uniquement la partie contenant le fichier par exemple dans une requête en plusieurs parties.

Par ailleurs, un navigateur peut demander que le contenu des réponses du serveur soit compressé en définissant Accept-Encoding en-tête selon ici :

GET /index.html HTTP/1.1
Host: www.http-compression.com
Accept-Encoding: gzip
User-Agent: Firefox/1.0

Cela renverra les données compressées au navigateur.

30
Andy

Répondre à la partie sur les requêtes compressées, pas les réponses: oui, c'est possible, même si cela ne semble pas largement utilisé. L'application côté client doit définir l'en-tête de codage de contenu approprié. Quant à l'application côté serveur, il y a 2 choix:

  1. l'application prend en charge le regonflage du corps de la demande par lui-même. Un exemple de bibliothèque qui peut le faire est celui de phpxmlrpc.

  2. le serveur Web gonfle le corps de la réponse avant de le transmettre à l'application. Ceci est possible en utilisant f.e. le filtre mod_deflate d'Apache et la mise en place d'un inputFilter

4
gggeek

Pas nativement à partir de n'importe quel navigateur que je connaisse, vous devriez trouver un plugin qui le ferait pour vous. Vous devez essentiellement définir l'en-tête HTTP de codage de contenu pour que le serveur sache comment la demande est envoyée. Le serveur, bien sûr, doit être capable de gérer ce codage.

2
squillman

Ce n'est PAS autorisé. Selon la spécification HTTP ( RFC 2616 ), Content-Encoding n'est PAS l'un des champs d'en-tête de demande possibles, il n'est donc pas possible de compresser le corps de l'entité de demande car il n'existe aucun moyen légal de signaler au serveur que cela s'est produit. Toute compression du corps de la demande se fait uniquement comme une extension non standard.

0
Steve