Amazon S3 — Метод 405 Не разрешено использовать POST (хотя я разрешил POST в корзине)

Я столкнулся с проблемой, что мой график (с использованием AJAX - POST - PHP) не отображается на Amazon

http://cdpmotest.s3-website.eu-central-1.amazonaws.com/

это говорит (ошибка неправильного метода 405)

Это моя конфигурация CORS:

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

И это мой сценарий:

<script>
$(document).ready(function(){
     var randomScalingFactor = function(){ return Math.round(Math.random()*100)};
     $.ajax({
         url: 'graph-data.php',
         type: 'POST',
         dataType: 'json',
         success: function(data) {
              var array1 = data.map(function(item) {
                  return parseInt(item[1], 10);
              });
              var array2 = data.map(function(item) {
                  return parseInt(item[2], 10);
              });

              createGraph(array1, array2);
         }
     });//end AJAX request

function createGraph(array1, array2) {
     var ctx = document.getElementById("chart-area1").getContext("2d");
     var barChartData = {
     labels : ["Land Acquisition","Design Concept","Permits and  Licensing","Tendering","Elec.+Water Requests","Construction Start","Construction Finish","Site Handover"],
     datasets : [
     {
          fillColor : "rgba(0,154,166,0.5)",
          strokeColor : "rgba(0,154,166,0.8)",
          highlightFill: "rgba(0,154,166,0.75)",
          highlightStroke: "rgba(0,154,166,1)",
          data : array1
     },
     {
          fillColor : "rgba(77,79,83,0.5)",
          strokeColor : "rgba(77,79,83,0.8)",
          highlightFill : "rgba(77,79,83,0.75)",
          highlightStroke : "rgba(77,79,83,1)",
          data : array2
    }
    ]
    }//end bar chart data

    window.myBar = new Chart(ctx).Bar(barChartData, {
        responsive : true
    });
    }//end createGraph
    });
    </script>

Он отлично работает на локальном хосте (WAMPServer)

Не могли бы вы мне помочь?


person Deyab    schedule 16.08.2015    source источник
comment
Код состояния http 405: Метод, указанный в строке запроса, не разрешен для ресурса, указанного в Request-URI. Ответ ДОЛЖЕН включать заголовок Allow, содержащий список допустимых методов для запрошенного ресурса. (см. w3.org/Protocols/rfc2616/rfc2616-sec10.html). Можете ли вы установить заголовок разрешения в своем запросе на что-то? Кажется, сейчас пусто, может быть, в этом проблема.   -  person dr0i    schedule 16.08.2015
comment
У меня есть SET CORS для ‹AllowedHeader›*‹/AllowedHeader›, где * — это подстановочный знак, разрешающий все заголовки   -  person Deyab    schedule 16.08.2015


Ответы (1)


Прямая причина ошибки не связана с CORS и фактически вызвана тем фактом, что конечные точки веб-сайта S3 не поддерживают POST (его поддерживают только конечные точки REST, но на самом деле это не связано с проблемой).

Настоящая проблема в том, что вы пытаетесь использовать S3 для чего-то, чего он не делает.

 $.ajax({
     url: 'graph-data.php',
     type: 'POST',

S3 — это хранилище объектов, а не сервер приложений.

Вы не можете запустить php на S3. Вы не можете выполнить какой-либо код на стороне сервера на S3.

Вы можете разместить статический веб-сайт на Amazon S3. На статическом веб-сайте отдельные веб-страницы содержат статический контент. Они также могут содержать сценарии на стороне клиента. Напротив, динамический веб-сайт зависит от обработки на стороне сервера, включая сценарии на стороне сервера, такие как PHP, JSP или ASP.NET. Amazon S3 не поддерживает сценарии на стороне сервера.

http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html

На той же странице документации вы найдете альтернативные решения AWS для достижения желаемого.

person Michael - sqlbot    schedule 16.08.2015
comment
Понятно... Я даже пытался использовать GET, и это не сработало. Ошибка 405 исчезла, когда я использовал GET, но график не появился. Хотя он появился на локальном хосте с помощью GET - person Deyab; 16.08.2015
comment
Что ж, верно, но не к делу, потому что ошибка на самом деле не о POST. Вы не можете запустить php или любой другой серверный язык на S3. - person Michael - sqlbot; 16.08.2015