53 votes

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 requêtes entrantes. Ne serait-il pas logique que les navigateurs compressent les messages de formulaire volumineux avant de les envoyer au serveur ?

Un autre exemple est celui d'un service web REST que nous utilisons. Nous devons envoyer fréquemment des requêtes PUT avec des fichiers XML de grande taille (plus de 10 Mo) et nous pourrions certainement constater des avantages en termes de bande passante et de vitesse de part et d'autre.

S'agit-il d'un problème résolu du côté du serveur ou chaque application web doit-elle le gérer individuellement ?

39voto

Jared Points 762

Pour PUT au serveur compressé, vous devez compresser le corps de la requête et définir le paramètre Content-Encoding: gzip l'en-tête. L'en-tête lui-même doit être décompressé. Il est documenté dans mod_deflate :

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

...

N Content-Encoding : gzip, l'en-tête sera automatiquement décompressé. Peu de navigateurs ont la la possibilité de décompresser le corps de la requête. Cependant, certaines applications spéciales prennent en charge la compression des par exemple certains clients WebDAV par exemple.

Et un article le décrivant est aquí :

Comment faire ? Voici un extrait, toujours à partir de la source de mod_deflate code : ne fonctionne que sur la requête principale/non sous-requêtes. Cela signifie que l'ensemble du corps de la requête doit être compressé par gzip gzip si nous choisissons de l'utiliser, il n'est pas n'est pas possible de ne compresser que la partie contenant le fichier, par exemple dans une requête en plusieurs parties.

Par ailleurs, un navigateur peut demander à ce que le contenu de la réponse du serveur soit compressé en définissant l'option Accept-Encoding conformément à l'article aquí :

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

Cela renvoie des données compressées au navigateur.

4voto

gggeek Points 41

Pour ce qui est de la compression des requêtes et non des réponses, c'est possible, même si l'usage n'en est pas très répandu. L'application côté client doit définir l'en-tête content-encoding approprié. Quant à l'application côté serveur, elle a deux choix :

  1. l'application prend en charge la réintégration du corps de la requête par elle-même. La bibliothèque phpxmlrpc est un exemple qui peut faire cela.

  2. le serveur web gonfle le corps de la réponse avant de le transmettre à l'application. Ceci est possible en utilisant par exemple le filtre mod_deflate d'Apache et en mettant en place un filtre inputFilter

2voto

Warren Blanchet Points 881

Aucun navigateur ne le fait nativement à ma connaissance, vous devez trouver un plugin qui le fera pour vous. Vous devez essentiellement définir l'en-tête HTTP content-encoding pour indiquer au serveur comment la requête est reçue. Le serveur, bien sûr, doit être capable de gérer cet encodage.

0voto

Tejas Savaliya Points 101

Le code ci-dessous configure l'en-tête personnalisé et transmet cet en-tête dans l'appel d'api en tant qu'options http :

getCustomHeaders() {
    return new HttpHeaders({
      'Accept-Encoding': 'gzip, deflate'
    });
}

Ensuite, lorsque vous appelez l'API pour obtenir les données, passez les options avec l'URL :

searchData(title: string, type: SearchType): Observable<any> {
    const headersSpl = this.getCustomHeaders();
    const httpOptions = {
      headers : headersSpl
    };
    const url = `${this.url}?s=${encodeURI(title)}&type=${type}&apiKey=${this.apiKey}`;
    return this.httpClient.get(url, httpOptions)
    .pipe(
      map( results => results['data']),
      catchError( error => { console.log(error); return EMPTY })
    )
  }

-2voto

Steve Points 21

Cela n'est pas autorisé. Selon la spécification HTTP ( RFC 2616 ), Content-Encoding n'est PAS l'un des champs d'en-tête possibles, il n'est donc pas possible de compresser le corps de l'entité de la demande car il n'y a pas de moyen légal d'informer le serveur que cela s'est produit. Toute compression du corps de la demande n'est effectuée qu'en tant qu'extension non standard.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X