2017-10-10 3 views
0

Nous avons un site Web statique hébergé sur s3.
A partir de la page, nous faisons une publication jquery ajax sur la fonction AWS api gateway/lambda.
Je ne suis pas sûr comment fonctionne la chose OPTIONS mais lorsque nous activons le 'chrome permettre cross origine plugin' tout fonctionne bien (nous obtenons la réponse JSON retour),
Lorsque le plugin est désactivé, nous obtenons l'erreur "Request header champ Access-Control-Allow-Origin n'est pas autorisé par Access-Control-Allow-Headers dans la réponse preflight "
Est-il possible de faire le POST sans le plugin et obtenir une réponse positive Nous avons également activé CORS sur l'API passerelle.Site statique AWS S3 CORS jquery ajax POST vers API Gateway

Voici le AJAX POST

$.ajax({ 
type: 'POST', 
url: API_URL, 
data: JSON.stringify(inputdata), 
dataType: 'json', 
beforeSend: function(xhr) { 
xhr.setRequestHeader("Access-Control-Allow-Origin", "*"); 
xhr.setRequestHeader("Access-Control-Allow-Methods", "OPTIONS,POST"); 
xhr.setRequestHeader("Access-Control-Allow-Headers", "X-Requested-With,Access-Control-Allow-Headers,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token"); 
xhr.setRequestHeader("Content-Type", "application/json"); 
//xhr.setRequestHeader("origin", "http://evil.com/"); 
}, 
/* 
headers: { 

     'Access-Control-Allow-Headers':'Access-Control-Allow-Headers,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token', 
     'Access-Control-Allow-Origin' : '*', 
     'Access-Control-Allow-Methods' : 'OPTIONS,POST', 
     'Access-Control-Allow-Credentials' : true, 
     'Content-Type': 'application/json; charset=utf-8' 
},*/ 
crossDomain: true, 
success: function (data) {getdatasuccess(data)}, 
error: function(data){ 
console.log("error = "+JSON.stringify(data)); 
} 
}); 

têtes de réponse lorsque 'permettent le plugin origine cross' plug-in est activé

: autorité: 64j2k6w2dc.execute-api.us-east-1.amazonaws.com
: méthode: OPTIONS
: chemin:/prod
: scheme: https
accepte: /
accept-encoding: gzip, deflate, br
accept-language: fr-FR, fr; q = 0.8
access-control-request-en-têtes: access-control-allow-en-têtes, access-control-allow-methods , de contrôle d'accès, permettent d'origine, le type de contenu
de contrôle d'accès de requête de procédé: POST
origine : http://evil.com/
user-agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537,36 (KHTML, comme Gecko) Chrome/Safari 61.0.3163.100/537.36

têtes de réponse lorsque « permettent plugin'plugin d'origine croisée est désactivée

: autorité: 64j2k6w2dc.execute-api.us- east-1.amazonaws.com
: méthode: OPTIONS
: chemin:/prod
: scheme: https
accepter: /
Accept-Encoding: gzip, dégonfler, br
accepter de langue: en-US, en; q = 0,8
access-control-request-entêtes: access-control-allow-headers, contrôle d'accès-allow-methods, contrôle d'accès-autorisation-origine, type de contenu
méthode de demande de contrôle d'accès: POST
origine: https://s3.amazonaws.com
référenceur: https://s3.amazonaws.com/mysitetest/htmlpage2.html
user-agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/61.0.3163.100 Safari/537.36

+0

Vous vous posez encore plus de problèmes en essayant de définir ces en-têtes dans votre requête ajax. –

+0

Tous les ont pris, mais cela n'a pas aidé. – user2324723

Répondre

1

Il fonctionne pour moi:

passerelle API> OPTIONS Méthode> Réponse d'intégration> En-tête Mappages:

Access-Control-Laissez-têtes: « Content-Type, X-Amz-Date , Autorisation, X-Api-Key, jeton de sécurité X-Amz, X-XSRF-TOKEN, en-tête de contrôle d'accès, autorisation d'accès-autorisation-origine '

Autorisation de contrôle d'accès- Méthodes: 'POST, GET, OPTIONS'

Accès-Contrôle-Autoriser-Origine: '*'

Et supprimer les en-têtes inutiles du client!

+0

J'ai maintenant activé les paramètres exacts sur API Gateway> Options de méthode> Réponse d'intégration> Mappages d'en-tête Malheureusement, je ne peux pas coller une capture d'écran ici. Voici un lien vers ma page S3 https://s3.amazonaws.com/anothercoderiot/htmlpage2.html Entrez le Id 64-5A-04-A6-06-6F Encore une fois si vous activez Teh CORS « Autoriser -Control-Allow-Origin "plugin la page fonctionne. Merci d'avance – user2324723