Я застрял в проблеме с шлюзом API, и я прошел через все остальные ответы SO на этом форуме AWS и прошел через их docs, но до сих пор нет радости.AWS API Gateway Нет заголовка «Access-Control-Allow-Origin»
Я пытаюсь настроить API с помощью AWS API-шлюза, который вызывает функцию Lambda, которая читает/записывает в таблицу в DynamoDB.
Работает функция Lambda для DynamoDB. Я создал API в AWS и создал для него методы GET и OPTIONS. Я прочитал, что AWS не применяет OPTIONS только для GET/POST, но я получал ошибку перед полетом в моем вызове ajax, когда не было метода OPTIONS, поэтому я добавил его.
На данный момент только для достижения прогресса Я не использую ключ API или авторизацию. Я могу успешно вызвать метод GET с помощью POSTMAN, который возвращает содержимое таблицы DynamoDB.
Но когда я пытаюсь с помощью AJAX вызова JQuery я получаю
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Я могу видеть с помощью Chrome Dev инструментов на вкладке сети, метод OPTIONS статус 200 возвращения и GET возвращает статус 200, но с вышесказанным ошибка.
Я попытался включить CORS как в методах OPTIONS, так и GET, повторно развернул API после каждого изменения, попробовал следующее (http://enable-cors.org/server_awsapigateway.html), но всегда получал ту же ошибку в консоли.
Я выполняю вызов ajax из файла на моем рабочем столе, поэтому происхождение является нулевым, поскольку страница будет развернута на S3 как одно приложение веб-страницы в JS.
Когда я включил CORS на моем GET и OPTIONS я могу видеть, что Access-Control-Allow-Headers является 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'
и Access-Control-Allow-Origin * является '*'
Мой Ajax вызов выглядит, как показано ниже. Я также попытался скопировать точные заголовки POSTMAN использует, который имеет набор заголовков авторизации (который я поворачивал в AWS в настоящее время), но я всегда получаю ту же ошибку выше
var awsHeaders = {};
awsHeaders['X-Amz-Date'] = '20161127T171734';
$('#add, #cloud').click(function() {
$.ajax({
type: 'GET',
headers: awsHeaders,
dataType : "json",
url: '...',
success: function (res) {
console.log('response in GET:');
console.log(res);
},
error: function(data) {
console.log('in error');
console.log(data);
}
});
});
Может кто-нибудь пролить свет на то, что я мог бы отсутствовать?
Большое спасибо
Update См ответ ниже относительно того, как я решил эту проблему в соответствии с комментариями DigitalKapteain - установив «Access-Control-Allow-Origin»: «*» заголовок в ответ от моего Lambda функция. Я искал это в документах AWS, но не смог найти его. Эта ссылка описывает разницу между Lambda и Lambda Proxy и объясняет, что делать при использовании CORS https://serverless.com/framework/docs/providers/aws/events/apigateway/
Возможно, вы ничего не пропустили, и это может быть проблема кэширования интернет-провайдера, попробуйте другое подключение к Интернету и новый браузер, если нет, то CORS может быть проблемой – Waheedi
Спасибо. Я не думаю, что это проблема интернет-провайдера, поскольку я пробовал это на разных сетевых подключениях (кафе, гостиница и т. Д.). Также очистили кэшированные и т. Д. И попробовали разные браузеры – user12345
Тогда его CORS @ user12345 Я думаю, что вы уже видели эту документацию, но попробуйте дважды проверить, что вы снова прошли шаги, http://docs.aws.amazon.com/apigateway/latest /developerguide/how-to-cors.html – Waheedi