Я использую угловой для 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
app.config ([ '$ httpProvider', функция ($ httpProvider) { $ httpProvider.defaults.headers.common [ "X-Requested-С"] = 'XMLHttpRequest'; }]); – mehrdad
@mehrdad Добавление этого прерывает другой текущий рабочий запрос POST на странице. Есть ли способ добавить это конкретно к запросу? –
Я использую это тоже для отправки данных заголовка $ HTTP ({ URL: $ scope.path + '/ счета/EditUserAngular', метод: 'Post', заголовки: { 'RequestVerificationToken': $ scope.antiForgeryToken, 'IsMobile': "истинный", "X-Requested-With": "XMLHttpRequest" }, данные: { модель: $ scope.UserEditViewModel, } }) – mehrdad