2017-10-10 109 views
0

我們有一個靜態網站託管在s3上。
從頁面我們做了一個jquery ajax post到AWS api gateway/lambda函數。
我不確定OPTIONS是如何工作的,但是當我們啓用'chrome allow cross origin plugin'啓用一切正常(我們得到JSON響應)時,
當插件被禁用時,我們得到錯誤「Request header Access-Control-Allow-Origin不允許在預檢響應中使用Access-Control-Allow-Headers「
是否可以在沒有插件的情況下執行POST並獲得成功的響應 我們還在API上啓用了CORS網關。AWS S3靜態站點CORS jquery ajax POST到API網關

這裏是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)); 
} 
}); 

響應頭時, '允許跨起源插件' 插件啓用

:權威:64j2k6w2dc.execute-api.us-east-1.amazonaws.com
:方法:OPTIONS
:路徑:/ PROD
:方案:HTTPS
接受:/
accept-encoding:gzip,deflate,br
accept-language:zh-CN,en; q = 0.8
access-control-request-headers:access-control-allow-headers,access-control-allow-methods ,訪問控制允許來源,內容類型
訪問控制請求-方法:POST
起源:http://evil.com/
用戶代理:Mozilla的/ 5.0(Windows NT的6.3; Win64平臺; 64)爲AppleWebKit/537.36(KHTML,例如Gecko)鉻/ 61.0.3163.100 Safari瀏覽器/ 537.36

響應頭時「允許跨原點plugin'plugin被禁用

:授權:64j2k6w2dc.execute-api.us- east-1.amazonaws.com
:方法:OPTIONS
:路徑:/ PROD
:方案:HTTPS
接受:/
接受編碼:gzip,放氣,BR
接受語言: en-US,en; q = 0.8
訪問控制請求標題:訪問控制允許標題,訪問控制允許方法,訪問控制允許來源,內容類型
訪問控制請求方法:POST
原始地址:https://s3.amazonaws.com
referer:https://s3.amazonaws.com/mysitetest/htmlpage2.html
user-agent:Mozilla/5.0(Windows NT 6.3; Win64平臺; x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/61.0.3163.100 Safari/537。36

+0

您試圖在您的ajax請求中設置這些標頭會引發更多問題。 –

+0

把他們全部拿出來,但沒有幫助。 – user2324723

回答

1

它爲我的作品:

API網關>方法選項>合併響應>標題映射:

訪問控制允許報頭:「內容類型,X-AMZ-日期,授權,X-Api-Key,X-Amz-Security-Token,X-XSRF-TOKEN,訪問控制允許源頭,訪問控制允許源頭'

訪問控制允許源頭方法:'POST,GET,OPTIONS'

訪問控制 - 允許來源:'*'

並從客戶端刪除不必要的標頭!

+0

我現在已啓用 API網關>方法選項>集成響應>標題映射 上的確切設置。不幸的是,我無法在此處粘貼屏幕快照。 這是我的S3頁面的鏈接 https://s3.amazonaws.com/anothercoderiot/htmlpage2.html 輸入設備ID 64-5A-04-A6-06-6F 如果您啓用了CORS「Allow -Control-Allow-Origin「插件可以工作。 在此先感謝 – user2324723