在PHP REST API上PUT和DELETE请求不成功,但POST和GET都很好

问题描述:

我已经构建了一个slimPHP REST API。下面是我对头:在PHP REST API上PUT和DELETE请求不成功,但POST和GET都很好

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被设置为*?

+0

你在运行什么样的服务器? – MysteriousWhisper

Slim Framework Documentation

不幸的是,现代的浏览器不提供HTTP PUT请求的原生支持。要解决此限制,确保你的HTML表单的method属性为“后”,那么方法重写参数添加到您的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是由现代浏览器本身支持的唯一部分。