web-dev-qa-db-fra.com

Chrome CORS bloquant la requête lambda de la passerelle API Gateway

Ce qui fonctionne

J'ai un jeu de mots simple que j'ai construit. Cela fonctionne très bien. Une chose que les utilisateurs ont demandée est un contrôle de validité de Word. J'exécute l'API Oxford Dictionary sur un point de terminaison AWS Lambda Proxy/Node.js, ce qui fonctionne très bien lorsque j'accède à l'URI APIGateway via le navigateur.

J'ai choisi une fonction AWS Lambda afin de protéger ma clé API Oxford et d'avoir un contrôle CORS plus direct.

Mesures prises

J'ai activé CORS dans AWS APIGateway et utilisé un caractère générique "*" pendant le développement.

J'ai commencé à coder l'ajout au jeu, en utilisant mon serveur local, @ 127.0.0.1.

Erreur rencontrée

J'ai rencontré le problème suivant:

myproject.html: 57 CORB (Cross-Origin Read Blocking) a bloqué la réponse cross-Origin https://XXXXXXXXXXX.execute-api.us-east-2.amazonaws.com/prod/dictionary?word=help avec le type d'application MIME/json. Voir https://www.chromestatus.com/feature/5629709824032768 pour plus de détails. getWord @ myproject.html: 57 (anonyme) @ myproject.html: 67

Le code client

J'utilise un simple fetch:

         var base_url = "https://XXXXXXXXXXX.execute-api.us-east-2.amazonaws.com/prod/dictionary?word=";
            getWord = function(Word){
               fetch(base_url+Word, {
                    headers: {
                        'content-type': 'application/json'
                    },
                    method: 'GET', 
                    mode: 'cors'
               }).then(function(response) {
                    console.log(response);
               });
            }

La question

Je n'ai jamais entendu parler de CORB. Je ne comprends pas ce qui déclenche CORB et quelles sont les étapes pour résoudre ce problème. Comment les problèmes CORB sont-ils résolus?

11
Radio

J'avais juste besoin de persévérer apparemment. Juste au cas où quelqu'un rencontrerait ceci:

Malgré l'activation d'APIGateway CORS, l'autorité CORS est transmise à la fonction lambda avec l'intégration du proxy Lambda activée. Bien que la demande d'URI initiale ait été acceptée sur l'APIgateway, elle a finalement échoué en raison du manque d'en-têtes dans la réponse lambda. D'une certaine manière, cela a déclenché CORB au lieu de CORS. Je ne sais pas pourquoi.

La réponse est de s'assurer que CORS est activé dans l'APIgateway et que le modèle de rappel de réponse de la fonction lambda contient un en-tête "Access-Control-Allow-Origin".

16
Radio