Symfony 4, CORS и OPTION запросы - PullRequest
       6

Symfony 4, CORS и OPTION запросы

0 голосов
/ 24 января 2019
  • Только что начал новый проект с Symfony 4 в качестве API и Vue в качестве внешнего интерфейса / приложения.
  • Vue начал жаловаться на CORS, поэтому я начал отправлять необходимые заголовки CORS (Access-Control-Allow-Origin).
  • Затем он начал говорить: «Ответ на предпечатную проверку не имеет статуса HTTP ok.».

Я взломал свой API, чтобы код состояния всегда был равен 200, но я ищу долгосрочное решение. Почему мой API, созданный с помощью Symfony 4, не отвечает статусом OK?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Поскольку в предварительных запросах используется метод запроса OPTIONS, весьма вероятно, что ваш веб-сервер не настроен на их поддержку "из коробки" - многие по умолчанию поддерживают только GET, POST и HEAD.

Если это такВ этом случае это может быть так же просто, как изменить флаг, чтобы разрешить запросы OPTIONS.Ну, а также возвращая правильные заголовки ответа CORS ...

0 голосов
/ 24 января 2019

Вы можете использовать https://github.com/nelmio/NelmioCorsBundle -> его легко настроить

nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: []
        allow_headers: []
        allow_methods: []
        expose_headers: []
        max_age: 0
        hosts: []
        origin_regex: false
        forced_allow_origin_value: ~
    paths:
        '^/api/':
            allow_origin: ['*']
            allow_headers: ['X-Custom-Auth']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            max_age: 3600
        '^/':
            origin_regex: true
            allow_origin: ['^http://localhost:[0-9]+']
            allow_headers: ['X-Custom-Auth']
            allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
            max_age: 3600
            hosts: ['^api\.']

для ответа вручную, вы можете прочитать определение в https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request

-> это в основномзаявляет, что запрос Option будет содержать как минимум 3 заголовка:

  • Access-Control-Request-Method
  • Access-Control-Request-Headers
  • Origin

Чтобы запрос был выполнен успешно, вам нужно будет ответить на этот запрос путем возврата и пустого ответа со следующими заголовками:

  • Access-Control-Request-Methods - списокразрешенные вами методы (т. е. «POST, GET, OPTIONS»)
  • Access-Control-Allow-Origin - запрашиваемый источник

или статус не 2xx, если запрос corsдолжно быть отклонено

...