2016-09-08 5 views
0

Я использую угловой для POST файла в ведро 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 
}) 

Что может быть причиной этого?

EDIT: Я обнаружил причину, по которой не было тела запроса, потому что на S3 отправляется запрос предварительной проверки OPTIONS. Я добавил политику CORS в ведро, позволяющую использовать методы OPTIONS и POST, поэтому теперь запрос OPTIONS возвращается правильно.

Однако после получения ответа OPTIONS никакой POST не выполняется, хотя POST должен соответствовать требованиям.

Эти заголовки запроса из вариантов:

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 

Эти заголовки ответа из вариантов:

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-Requested-С"] = 'XMLHttpRequest'; }]); – mehrdad

+0

@mehrdad Добавление этого прерывает другой текущий рабочий запрос POST на странице. Есть ли способ добавить это конкретно к запросу? –

+0

Я использую это тоже для отправки данных заголовка $ HTTP ({ URL: $ scope.path + '/ счета/EditUserAngular', метод: 'Post', заголовки: { 'RequestVerificationToken': $ scope.antiForgeryToken, 'IsMobile': "истинный", "X-Requested-With": "XMLHttpRequest" }, данные: { модель: $ scope.UserEditViewModel, } }) – mehrdad

ответ

0

"Обновление нестабильным-запросы": "1" в результате чего ваш почтовый запрос отправляется как ОПЦИИ, я столкнулся с той же проблемой, поэтому я удаляю указанную выше строку, и она сработала. После этого я столкнулся с новой ошибкой CrossDomain, но, когда я проверяю с помощью скрипача, все в порядке. Это проблема с браузером (Chrome).