【问题标题】:Amazon S3 - 405 Method Not allowed using POST (Although I allowed POST on the bucket)Amazon S3 - 405 方法不允许使用 POST(尽管我允许在存储桶上进行 POST)
【发布时间】:2015-11-09 02:22:33
【问题描述】:

我遇到的问题是我的图表(使用 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)上工作正常

你能帮帮我吗?

【问题讨论】:

  • 405 http 状态码是:"Request-Line 中指定的方法对于 Request-URI 标识的资源是不允许的。响应必须包含一个 Allow 标头,其中包含有效方法列表请求的资源。”(参见w3.org/Protocols/rfc2616/rfc2616-sec10.html)。您可以将请求中的允许标头设置为某些内容吗?现在似乎是空的,也许这就是问题所在。
  • 我已将 CORS 设置为 * 其中 * 是允许所有标题的通配符

标签: php ajax json amazon-web-services amazon-s3


【解决方案1】:

错误的直接原因与CORS无关,实际上是由于S3网站端点不支持POST(只有REST端点支持,但实际上与问题无关)手头)。

真正的问题是您似乎试图将 S3 用于它不做的事情。

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

S3 是一个对象存储,而不是应用服务器。

你不能在 S3 上运行 php。您无法在 S3 上执行任何服务器端代码。

您可以在 Amazon S3 上托管静态网站。在静态网站上,单个网页包含静态内容。它们还可能包含客户端脚本。相比之下,动态网站依赖于服务器端处理,包括服务器端脚本,例如 PHP、JSP 或 ASP.NET。 Amazon S3 不支持服务器端脚本。

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

文档的同一页将为您提供替代 AWS 解决方案,以实现您想要的。

【讨论】:

  • 我明白了....我什至尝试使用 GET 但它不起作用.. 使用 GET 时错误 405 消失了,但图表没有出现。虽然它出现在使用 GET 的本地主机上
  • 嗯,对,但不相关,因为错误与POST 无关。您不能在 S3 上运行 php 或任何其他服务器端语言。
猜你喜欢
  • 2014-05-23
  • 2016-02-15
  • 2014-04-18
  • 2021-11-24
  • 2018-12-20
  • 2015-11-16
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多