我在API網關的問題上停滯不前,並且我已經通過了所有其他關於此問題的答案,AWS論壇並已通過其文件,但仍然沒有喜悅。AWS API網關否存在'Access-Control-Allow-Origin'標頭
我正在嘗試使用AWS API網關設置API,該API調用一個讀/寫DynamoDB中的表的Lambda函數。
DynamoDB的Lambda函數正在工作。我在AWS中創建了一個API,併爲它創建了一個GET和OPTIONS方法。我讀AWS不強制只有GET/POST的OPTIONS,但當我沒有OPTIONS方法時,我在ajax調用中出現預檢錯誤,所以我添加了一個。
現在只是爲了取得進展,我沒有使用API密鑰或授權。 我可以使用POSTMAN成功調用GET方法,該方法返回DynamoDB表的內容。
但是當我嘗試使用jQuery的Ajax調用我得到
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
我可以看到使用網絡選項卡下的Chrome瀏覽器開發工具,OPTIONS方法返回狀態200和GET返回狀態200,但與上述錯誤。
我已經嘗試在OPTIONS和GET方法上啓用CORS,在每次更改後都重新部署了API,嘗試了以下操作(http://enable-cors.org/server_awsapigateway.html),但始終在控制檯中獲取相同的錯誤。
我正在執行我的桌面上的文件的ajax調用,所以原點爲空,因爲頁面將部署到S3作爲它在JS中的單個網頁應用程序。
當我啓用CORS在我的GET和選項我可以看到,訪問控制,允許報頭是'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'
和訪問控制允許來源*是'*'
我的Ajax調用看起來像下面。我也試着拷貝正確的頭郵差使用,它具有授權報頭組(這是我在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);
}
});
});
任何人都可以擺脫對我可能輕了同樣的錯誤失蹤?
非常感謝
更新下面關於我是如何解決這個按照DigitalKapteain評論 見答案 - 通過設置「訪問控制允許來源」:從我的LAMBDA響應「*」頭功能。我在AWS文檔中查找了這個,但是找不到它。此鏈接描述了Lambda和Lambda代理之間的區別,並解釋了使用CORS時要執行的操作。https://serverless.com/framework/docs/providers/aws/events/apigateway/
它可能是你不缺少什麼,它可能是一個ISP緩存的問題,嘗試不同的網絡連接和新鮮的瀏覽器,如果沒有,那麼CORS可能是問題 – Waheedi
感謝。我不認爲它是一個ISP問題,因爲我在不同的網絡連接(咖啡館,酒店等)上嘗試過這個問題。也清除了緩存等,並嘗試了不同的瀏覽器 – user12345
然後它的CORS @ user12345我認爲你已經看過這個文檔,但是試着再次檢查你是否再次執行了這些步驟,http://docs.aws.amazon.com/apigateway/latest /developerguide/how-to-cors.html – Waheedi