2017-03-13 1 views
3

Je construis un site web sans serveur avec AWS API Gateway (APIG) et les fonctions Lambda. Je dois utiliser l'intégration de proxy car la fonction Lambda derrière doit recevoir les en-têtes de requête http. En même temps, certaines données binaires doivent être servies. Dans mon cas, le fichier favicon.ico. D'autres personnes pourraient vouloir servir des fichiers PDF ou Excel créés dynamiquement. APIG a un support binaire à cette fin. Coder les données avec base64 et configurer ce type de contenu MIME afin qu'il puisse être décodé avant d'être servi au client. Cependant, cela ne fonctionne pas avec l'intégration de proxy. L'intégration de proxy saute juste la partie de réponse d'intégration.Comment servir les données binaires d'AWS API Gateway avec l'intégration de proxy?

J'ai essayé de rediriger la demande de favicon.ico vers le point de terminaison S3, mais les navigateurs affichent des comportements étranges. Parce que le fichier ico provient d'un domaine différent et redirigé, pas le même domaine.

Le codage avec base64 et le décodage du navigateur client n'est pas une option car ce n'est pas standard et peut ne pas fonctionner dans tous les navigateurs.

Je suppose que je ne peux rien faire d'autre jusqu'à ce qu'AWS ajoute une nouvelle fonctionnalité pour cela. Est-ce que quelqu'un a examiné ce problème? Une idée ou une suggestion?

Répondre

0

Répondre à ma propre question ici. Vous devriez aller sur les forums AWS pour les questions AWS. Pas mamy utilisateurs AWS ici. La réponse: La prise en charge binaire avec l'intégration du proxy NE FONCTIONNE PAS et fonctionne à la fois pour les réponses entrantes et sortantes.

Il y a 3 facteurs liés à cela:

  1. les types MIME dans les paramètres de support binaires pour APIG (je ceci sur la console)
  2. la valeur "isBase64Encoded" dans les deux JSON entrant et sortant
  3. la valeur « Content-type » dans JSON sortant

la réponse ci-dessus signifie que, oui, vous pouvez accepter des fichiers et oui encore une fois, vous pouvez cracher sur les fichiers avec l'intégration proxy. Lorsque l'utilisateur «publie» avec le corps et si le type MIME que vous définissez correspond, APIG code la partie du corps entier dans base64 et l'indique avec la valeur «isBase64Encoded». La même chose arrive avec les réponses sortantes aussi. Si vous souhaitez répondre avec des données binaires, vous devez l'encoder en base64 et définir cette valeur true dans JSON sortant.

Pour les demandes entrantes, cela dépend d'un seul facteur, le type MIME que vous avez défini. Pour les messages sortants, les deux conditions, l'indicateur JSON et le type MIME doivent correspondre.

Pour simplifier, je viens de définir le type MIME à */*. Chaque fois que l'utilisateur soumet quelque chose dans le corps, laissez APIG encoder puis je décode. Chaque fois que je réponds avec binaire, je viens de définir l'indicateur et encoder en base64. Je ne le fais pas avec d'autres types tels que test/html (non compressé).

+0

J'essaye de retourner un PDF dans un de mes points de terminaison, et je l'ai codé comme base64 et ai placé "isBase64Encoded" à vrai. Cependant, le PDF que je reçois semble ne pas être décodé correctement. Si j'ouvre le fichier dans un éditeur de texte, le décoder manuellement et le sauvegarder, alors je peux voir le PDF. Des idées pour lesquelles cela se passe? – JPL

+0

JPL, vérifiez vos paramètres MIME pour le support binaire. – gini09

+0

Depuis mon dernier commentaire, j'ai ajouté le support binaire pour tous les types, */*, qui fonctionne, mais il bouscule les types non-binaires tels que JSON. Si je tape dans application/pdf ou même application/*, API Gateway ne les reconnaît pas et ne traitera pas correctement le type.Je ne suis pas sûr si le format est faux ou s'il y a d'autres paramètres. – JPL