AWS API подписал запрос POST с Javascript
Что я пытаюсь сделать:
В конечном счете: я хочу заполнить поток AWS Kinesis из расширения браузера (Safari, Chrome).
Мне нужно отправить запрос на AWS, используя процесс подписи (v4); это включает настройку заголовков и их шифрование (на удаленном сервере с секретным ключом aws), чтобы окончательно присоединиться к этим запросам.
Amazon запрашивает заголовок "Host" для явного определения...
Однако Javascript строго запрещает его установку (и множество других, по уважительным причинам)
Мне что-то не хватает - как я могу это сделать?
Источники:
http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html - пример находится на Python, но он показывает, как серверная сторона намерена использовать заголовок Host
Примечания: в настоящее время я использую POST; в примерах комментариев, описывающих строку GET и запроса, упоминается также "Хост": он должен существовать как заголовок в запросе
также: используя подобную настройку, мне удалось загрузить файл с клиента непосредственно в ведро S3 - процесс авторизации немного отличается (нет требования для "Host" ).
Ответы
Ответ 1
Заголовок Host:
заполняется и анализируется из заданного URL самого JS XHR при его выполнении, как и в случае с curl
, например.
curl -v -X POST http://example.org/foo
... автоматически добавит заголовок Host: example.org
...
Для AWS вам все равно нужно добавить его в список canonical_headers
для подписания (и во всех строчных), как описано в приведенном примере. Эта часть не имеет ничего общего с установлением соединения.