PUT和DELETE请求在PHP REST API上失败,但是POST和GET都没问题

时间:2013-07-19 03:59:51

标签: php rest put slim http-delete

我已经构建了一个slimPHP REST API。这就是我对标题的看法:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true"); 
header('Access-Control-Allow-Headers: origin, content-type, accept');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT');
header('Access-Control-Max-Age: 86400'); 

然而,当我尝试跨域PUT或DELETE请求时,我得到的只是(样本域):

XMLHttpRequest cannot load http://www.example.com/api/x.
Origin http://www.example.com is not allowed by Access-Control-Allow-Origin. 

如果将Access-Control-Allow-Origin设置为*?

,任何想法都会发生这种情况

1 个答案:

答案 0 :(得分:1)

来自Slim Framework Documentation

  

不幸的是,现代浏览器不提供对HTTP PUT请求的本机支持。要解决此限制,请确保HTML表单的方法属性为“post”,然后将方法覆盖参数添加到HTML表单中,如下所示:

    <form action="/books/1" method="post">
        ... other form fields here...
        <input type="hidden" name="_METHOD" value="PUT"/>
        <input type="submit" value="Update Book"/>
    </form>
     

如果您使用的是Backbone.js或命令行HTTP客户端,您还可以使用X-HTTP-Method-Override标头覆盖HTTP方法。

您可以使用任何您想要的请求类型(包括foo等自定义请求类型),但GET和POST是现代浏览器本身支持的唯一类型。