13 votes

Comment renvoyer un contenu gzippé avec AWS API Gateway ?

Nous avons développé une application qui offre plusieurs services de repos et de soutien Accept-Encoding pour renvoyer le contenu compressé par l'intermédiaire de l'en-tête Content-Encoding:gzip valeur de l'en-tête.

Cette application est déployée sur des instances ec2 sur aws et lorsque nous envoyons une requête avec Accept-Encoding la réponse est correctement construite.

Nous voulons exposer cette api en utilisant une passerelle d'api mais cela ne fonctionne que parce que les requêtes ne sont pas compressées. Lorsque nous envoyons une requête demandant un contenu gzippé, la commande Content-Encoding est correctement défini mais le contenu de la réponse est corrompu.

Devons-nous définir un paramètre ou une configuration particulière dans la réponse d'intégration ou dans les étapes de la réponse de la méthode ?

Voir aussi.

0voto

Jaewoo Ahn Points 1

Bien que cette question soit un peu ancienne, j'aimerais y apporter une réponse puisqu'elle est la plus consultée. En fait, il y a deux scénarios liés au retour du contenu compressé.

Le premier scénario est celui où vous souhaitez que API Gateway compresse le contenu. Comme le suggère la réponse acceptée, vous pouvez activer l'encodage du contenu sur votre API puis la déployer.

Le deuxième scénario est que votre point de terminaison d'intégration a déjà compressé le résultat et que vous souhaitez simplement le contourner via API Gateway. La solution traditionnelle consiste à le configurer en tant que type de média binaire. Cependant, cela peut être problématique car il commencera à traiter toutes les réponses avec le type de média comme un binaire. En outre, si vous devez traiter plusieurs types de médias, votre seul choix serait de le configurer comme "*". Si vous utilisez une intégration non proxy, vous perdrez la possibilité de transformer le résultat.

Pour résoudre le second problème, API Gateway considère désormais implicitement qu'une réponse est binaire lorsqu'une intégration par proxy est utilisée ET que le contenu est encodé (la réponse a Content-Encoding avec une valeur autre que "identity"). Vous n'avez plus besoin de configurer les types de médias binaires lorsque ces conditions sont remplies. Cependant, si vous renvoyez le média binaire réel (par exemple, une image, une vidéo), vous devez toujours les configurer en tant que type(s) de média binaire(s).

On peut se demander ce qui se passe dans les deux cas. La réponse courte est que API Gateway ne compressera pas à nouveau lorsque la réponse a déjà un en-tête Content-Encoding.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X