【问题标题】:Allow CORS on symfony 4在 symfony 4 上允许 CORS
【发布时间】:2019-06-29 21:19:28
【问题描述】:

我最近需要允许 CORS,并在寻找解决方案时找到了nelmio/NelmioCorsBundle

对于乞讨,我可以允许来自任何来源的请求,所以这是我的app/config/config.yml

nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: ['*']
        allow_headers: ['*']
        allow_methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
        max_age: 3600
        origin_regex: false 

它仅适用于 GET 请求,任何 POST 请求都会返回:

请求中没有“Access-Control-Allow-Origin”标头 资源。

我不一定需要使用这个捆绑包,在乞求时我试图取消注释 TRUSTED_HOSTS 并将其设置为我在 dotenv 文件上的域,但它没有用。我也没有在文档中找到关于这个 TRUSTED_HOSTS 的任何帮助。

因此,对于这个捆绑包或 symfony 上 CORS 的任何其他解决方案的任何帮助,我都会很高兴。


如被问及,我正在使用我当前的 nelmiocors 配置进行更新:

# app/config/config.yml

# Nelmio CORS Configuration
nelmio_cors:
    defaults:
        origin_regex: true
        allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['Content-Type', 'Authorization']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/':
          origin_regex: true
          allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
          # allow_origin: ['^http://localhost:[0-9]+']
          allow_headers: ['*']
          allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
          # allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
          max_age: 3600
          # hosts: ['^api\.']

【问题讨论】:

  • 您可以在使用 Symfony Flex 安装捆绑包时查看配方。这是默认配置:github.com/symfony/recipes/blob/master/nelmio/cors-bundle/1.5/… 如您所见,.env 文件也使用参数 CORS_ALLOW_ORIGIN 完成
  • 是的,我按照食谱做了,但是没用,之后我尝试了一条特定的路线,得到了另一个错误,所以我退后一步寻求帮助

标签: php symfony symfony4 nelmiocorsbundle


【解决方案1】:

不知道到底出了什么问题,但作为其中一位 cmet 的帮助(帮助的人可能已经删除了他自己的评论)。

我最终得到了 Nelmio CORS 的这个配置:

nelmio_cors:
    defaults:
        origin_regex: true
        allow_origin: ['*']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['Content-Type', 'Authorization']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/': ~

然后从 cli 中手动清除缓存,然后它就可以工作了。

我对我做错了什么的猜测:当我第一次配置 Nelmio CORS 时,我没有清除缓存,因此它不起作用。之后,我尝试了其他一些配置组合,即使我清除了缓存,它也不起作用。如果我没有忘记清除缓存,这让我觉得代码应该从乞讨开始工作,在此之后我使用了无效的配置并且显然清除了缓存这是行不通的。总而言之,这是一个初学者的错误。

【讨论】:

  • 如果有人想通过 Postman 或 Direct 浏览器链接查看 CORS 标头 - 您将失败。您必须将 Origin 标头放入请求中,否则 CorsListener 将无法工作。 Nelmio\CorsBundle\EventListener\CorsListener::onKernelRequest() 中的详细信息
【解决方案2】:

例子:

nelmio_cors:
defaults:
    origin_regex: true
    allow_origin: ['*']
    allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
    allow_headers: ['Accept','Authorization','Cache-Control','Content-Type','DNT','If-Modified-Since','Keep-Alive','Origin','User-Agent','X-Requested-With']
    expose_headers: ['Authorization']
    max_age: 3600
paths:
    '^/': ~

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2017-07-28
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多