2015-01-11 2 views
0

Я использую Amazon S3 в качестве backend. У меня есть ведро, правильно настроенное, чтобы позволить CORS что-либо из моего домена. Я тестировал, что он работает для обычных файлов (т. Е. Загружается через консоль Amazon AWS или с помощью инструментов командной строки S3).Amazon S3 Запрос CORS не удался для загруженных файлов

Мое приложение также загружает файлы JSON непосредственно в ведро S3. Интересно, что CORS правильно настроен для успешной загрузки. Это происходит, и мой JSON-файл помещается в ведро.

Проблема заключается в том, когда я делаю запрос CORS GET (JQuery $.ajax) для этих файлов я ранее загруженных, запрос не с типичным сообщением

No 'Access-Control-Allow-Origin' header is present on the requested resource. 

Пожалуйста, обратите внимание, что с любым другим файлом в том же ведре, тот же путь, который не был загружен приложением, но из консоли или инструментов линии comnmand запрос успешно завершен.

Почему это происходит? Конфигурация

Мои CORS:

<?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>*</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>http://example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
    <CORSRule> 
     <AllowedOrigin>https://example.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 
+0

Вы делаете запрос ajax через localhost? Возможно ли, что это проблема политики одного и того же происхождения (https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)? –

+0

это не так, потому что запрос GET завершается неудачно для файлов **, ранее загруженных из приложения **, если я загружаю их через консоль S3 или S3CMD, это удается. – rupps

+0

Можете ли вы разместить свой javascript-код? –

ответ

0

Где-то в JQuery документации вы найдете опцию $ .ajax.

jQuery.support.cors = true; 
... 
$.ajax(
    url, 
    { 
     crossDomain: true, 
     data: { 
      sampleData 
     }, 
     success: function() { 
      alert('Yeaaahhh') 
     }, 
     error: function(a,b,c) { 
      alert('failed'); 
     }, 
     type: 'post' 
    } 
); 

Но лучше использовать для этого XMLHTTPRequest. Нравится:

var xhr = new XMLHTTPRequest; 
xhr.open('POST', url); 
xhr.onreadystatechange = function(state, status){ 
    //do something 
}; 

xhr.onload = function(event){ 
    //do something 
}; 

xhr.onerror = function(event){ 
    //do something 
}; 

xhr.send(data); 

Greets.

Смежные вопросы