2016-09-08 26 views
0

我正在使用angular將文件發佈到Amazon S3存儲桶。爲了讓桶接受請求,我試圖向它添加一個Upgrade-Insecure-Requests頭,當我這樣做時,請求不再有一個主體。將標題添加到角度POST會導致請求正文爲空

此代碼正確地發送請求主體:

$http({ 
    method: "POST", 
    url: responseData.url, 
    data: postData, 
    headers: {"Content-Type": undefined}, 
    transformRequest: angular.identity 
}) 

儘管此代碼導致一個空的請求主體:

$http({ 
    method: "POST", 
    url: responseData.url, 
    data: postData, 
    headers: {"Content-Type": undefined, 
      "Upgrade-Insecure-Requests": "1"}, 
    transformRequest: angular.identity 
}) 

可能是什麼造成的?

編輯:我發現沒有請求正文的原因是因爲預檢OPTIONS請求正在發送到S3。我在容器中添加了一個CORS策略,允許使用OPTIONS和POST方法,所以現在OPTIONS請求可以正確返回。

但是,在接收到OPTIONS響應之後,即使POST應符合要求,也不會進行POST。

這些是OPTIONS的請求報頭:

OPTIONS/HTTP/1.1 
Host: tesssssst-aws-cms.s3.amazonaws.com 
Connection: keep-alive 
Access-Control-Request-Method: POST 
Origin: https://s3.amazonaws.com 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Access-Control-Request-Headers: cache-control, upgrade-insecure-requests 
Accept: */* 
Referer: https://s3.amazonaws.com/tesssssst-aws-cms/HTML/upload.html 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,ms;q=0.4,th;q=0.2 

這些是OPTIONS的響應報頭:

HTTP/1.1 200 OK 
x-amz-id-2: SQaOyODgprPIRe8uq3YEZBDXzVcUjyYc2GpLsZwmIwdII+FVIgOGQXokIzXTsBcIaOITgwrk8Zw= 
x-amz-request-id: 07EE6477F2B3273C 
Date: Thu, 08 Sep 2016 07:12:58 GMT 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, GET, POST 
Access-Control-Allow-Headers: cache-control, upgrade-insecure-requests 
Access-Control-Max-Age: 3000 
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method 
Content-Length: 0 
Server: AmazonS3 
+0

的app.config([ '$ httpProvider',函數($ httpProvider){$ httpProvider.defaults.headers.common [ 「X-請求-隨着」] = '的XMLHttpRequest'; }]); – mehrdad

+0

@mehrdad添加這個會打破頁面上另一個當前正在工作的POST請求。有什麼方法可以專門添加這個請求嗎? –

+0

我也用這個來發送數據到頭部$ http({url:$ scope.path +'/ Account/EditUserAngular', method:'Post', headers:{ 'RequestVerificationToken':$ scope.antiForgeryToken, 'IsMobile': 「真」, 「X-要求,用」: 「XMLHttpRequest的」 }, 數據:{ 模型:$ scope.UserEditViewModel, }} ) – mehrdad

回答

0

「升級不安全-請求」: 「1」 導致您的發佈請求作爲選項發送我面臨同樣的問題,所以我刪除了上面的行,它的工作。 之後,我面臨新的錯誤CrossDomain問題,但是,當我檢查與提琴手一切都很好。 這是瀏覽器(Chrome)的問題。

相關問題