Symfony 4,CORS和OPTION请求

时间:2019-01-23 21:12:56

标签: php symfony cors symfony4

  • 刚开始使用Symfony 4作为API,使用Vue作为前端/应用程序的新项目。
  • Vue开始抱怨CORS,所以我开始发送所需的CORS标头(Access-Control-Allow-Origin)。
  • 然后,它开始说“对飞行前的响应没有HTTP正常状态。”

我现在入侵了我的API,以强制将状态代码始终设置为200,但是我正在寻找一种长期的解决方案。为什么我的用Symfony 4构建的API不能以OK状态响应?

2 个答案:

答案 0 :(得分:1)

您可以使用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个标头:

  • 访问控制请求方法
  • 访问控制请求标头
  • 来源

要使请求成功,您必须通过返回以下内容为空的响应来响应该请求:

  • 访问控制请求方法-您允许的方法列表(即“ POST,GET,OPTIONS”)
  • Access-Control-Allow-Origin-请求的来源

或非2xx状态(如果应拒绝cors请求)

答案 1 :(得分:0)

由于预检请求使用OPTIONS请求方法,因此很可能您的网络服务器未设置为直接支持它们-默认情况下,许多服务器仅支持GET,POST和HEAD。

如果是这种情况,则可能就像更改标志以允许OPTIONS请求一样简单。好了,并且还返回了正确的CORS响应标头...