Symfony 4, CORS and OPTION requests


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

我现在破解了我的 API,强制状态代码始终为 200,但我正在寻找一个长期的解决方案。为什么我的API是用Symfony 4构建的,没有响应OK状态?

您可以使用

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 中的定义

->它基本上声明一个选项请求将包含至少 3 个标头:

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

要使请求成功,您必须通过返回具有以下标头的空响应来响应此请求:

  • 访问控制-请求-方法 - 您允许的方法列表(即"发布,获取,选项")
  • 访问控制允许源 - 请求的源

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

由于预检请求使用 OPTIONS 请求方法,因此您的 Web 服务器很可能没有设置为开箱即用地支持它们 - 许多默认仅支持 GET、POST 和 HEAD。

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

最新更新