FOSRest OPTIONS запрос возвращает 405 Метод не разрешен

Я написал службы REST с помощью Symfony FOSRestBundle. Он отлично работает с запросом GET.

Теперь я пытаюсь получить доступ с помощью Ember «models» и получаю сообщение об ошибке. Действительно, Ember пытается получить доступ с запросом OPTIONS (предварительная проверка), и это не удается с «полем заголовка запроса». Access-Control-Allow-Origin не разрешен Access-Control-Allow-Headers в предварительном ответе». Я попытался получить доступ к службе REST с помощью Postman и получил эту ошибку: с OPTIONS http://myUrl.local/groups : «Метод 405 не разрешен»

но он отлично работает, если я вызываю OPTIONS http://myUrl.local/

Я использую apache под El Capitan (IMac). Я попытался добавить эти строки в /private/etc/apache2/extra/httpd-default.conf : Заголовок добавить Access-Control-Allow-Origin "*" Заголовок добавить Access-Control-Allow-Headers "origin, content-type" Заголовок добавить Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

Я попытался добавить эти строки в директиву в моем VirtualHost. Одинаковые результаты в обоих случаях.

Проблема в Symfony или FOSrestBundle.

Мне нужна помощь, чтобы понять, что происходит. Как мне решить мою проблему.


person bsg78    schedule 29.07.2016    source источник


Ответы (1)


Я предполагаю, что ваше приложение Ember не размещено в том же домене, что и ваше приложение Symfony — может быть, это приложение на вашем телефоне? Это заставляет ваши запросы соответствовать протоколу CORS (совместное использование ресурсов между источниками).

Вы правильно определили заголовки, которые необходимо установить. Причина, по которой это не работает, заключается в том, что /groups, вероятно, направляет к действию, подобному этому:

<?php

namespace AppBundle\Controller;

class GroupsController
{
    public function getGroupsAction()
    {} // "get_users"            [GET] /users
}

Поскольку для этого действия требуется метод GET, FOSRestBundle блокирует запросы любого другого метода и возвращает полученный код состояния 405. Вот почему запрос OPTIONS к / работал нормально — его блокировал не ваш сервер, а FOSRestBundle.

Используйте NelmioCorsBundle для правильной обработки предварительной проверки. Комплект

  • Обрабатывает предварительные запросы CORS OPTIONS.
  • Добавляет заголовки CORS к вашим ответам

Для справки см. проблему № 587.

person Jonny    schedule 05.08.2016