S3: Нет "Access-Control-Allow-Origin" для AJAX POST

Эта проблема вызывает у меня немного орехов. Я пытаюсь загрузить файлы через AJAX POST в ведро S3.

У меня есть все учетные данные правильно, потому что, когда я выполняю обычные HTTP POST, он создает ресурс в ведро S3 просто отлично. Но мне бы очень хотелось загрузить несколько файлов одновременно с индикаторами выполнения, поэтому мне нужен AJAX.

У меня есть установка CORS на моем ведре S3:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://localhost:3000</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

Сейчас я просто пытаюсь заставить его работать в моей среде разработки (localhost: 3000, используя стандартный Rails 4.1).

Из моего понимания, приведенное выше правило CORS должно разрешать запросы AJAX с localhost: 3000 в ведро S3.

Однако каждый раз, когда я отправляю файл через AJAX, я получаю следующую ошибку:

XMLHttpRequest cannot load https://s3.amazonaws.com/<BUCKET>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

Это не имеет для меня никакого смысла, потому что localhost: 3000 предоставляется доступ через правило CORS.

Я также предоставил фрагмент JS, который я использовал для отправки формы:

  $.ajax({
    method: "POST",
    crossDomain: true,
    url: "https://s3.amazonaws.com/<BUCKET>",
    data: $(this).serialize() # Contains S3 necessary values
  })

Форма имеет входы для ключей Amazon S3/etc. Я знаю, что они работают, потому что, когда я выполняю обычные HTTP POST, он правильно создает актив в S3. Все, что я пытаюсь сделать, это AJAXify процесс.

Я пропустил что-то очевидное здесь?

Использование: Rails 4.1, jquery-file-upload, fog gem (для S3)

Ответы

Ответ 1

вы можете попробовать, изменив

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

Ответ 2

Ваш вопрос кажется очень похожим на проблему, с которой я столкнулся, и которая никогда не была должным образом (точно) ответной, и, казалось, была проблемой, связанной с ограничением браузера, а не фактической технологией передачи данных за ней.

Здесь ссылка на мой оригинальный вопрос и ответы, которые я получил здесь на SO: Почему Microsoft Skydrive не загружает несколько файлов через API?

Надеюсь, это может дать некоторое представление о вашей проблеме и это не просто шум.