2013-07-19 3 views
0

У меня есть API-интерфейс slistPHP REST. Вот что у меня есть для заголовков:Запросы PUT и DELETE безуспешны в PHP REST API, но 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

ответ

1

Из Slim Framework Documentation:

К сожалению, современные браузеры не обеспечивают нативную поддержку запросов HTTP PUT. Чтобы обойти это ограничение, обеспечить атрибут метод вашего HTML-форм является «пост», а затем добавить параметр метода переопределения в вашей 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 клиент, вы также можете переопределить метод HTTP с помощью заголовка X-HTTP-Method-Override.

Вы можете использовать любой тип запроса вы хотели бы (включая пользовательские них, как foo), но GET и POST является единственным, изначально поддерживается современными браузерами.