【问题标题】:Symfony 3 HTTP Cache and Cross Origin Headers overwriteSymfony 3 HTTP 缓存和跨域标头覆盖
【发布时间】:2017-07-05 16:52:18
【问题描述】:

我有一个前端 AngularJS 应用程序,它使用用 Symfony 3 编写的后端 API。我正在使用 Symfony HTTP 缓存来加速我的一些繁重的响应。

我处于测试阶段,所以我的后端 API 添加了 Access-Control-Allow-Headers:"*" 回复所有回复。

但是,缓存的响应存在问题。在它们的标头中,Access-Control-Allow-Headers:"*"Access-Control-Allow-Headers:"example.com" 覆盖,其中example.com 是在缓存之前请求资源的客户端地址。

所以,如果我在地址 www.example.com 而不是地址 example.com 上打开我的前端应用程序,我会在萤火虫中看到以下错误

XMLHttpRequest cannot load https://backend.com/tests/all. 
The 'Access-Control-Allow-Origin' header has a value 'http://example.com' 
that is not equal to the supplied origin. 
Origin 'http://www.example.com' is therefore not allowed access. 

我正在使用 NelmioCorsBundle,它将 CORS 标头支持添加到我的 Symfony3 应用程序。

【问题讨论】:

    标签: angularjs symfony caching cors nelmiocorsbundle


    【解决方案1】:

    尝试在您的配置中设置forced_allow_origin_value: *

     nelmio_cors:
        defaults:
            …
            forced_allow_origin_value: *
    

    the configuration docs:

    默认情况下,Access-Control-Allow-Origin 响应标头值为 Origin 请求标头值(如果它与您的规则匹配 用allow_origin) 定义,所以它应该适合大多数使用 案例。如果不是,您可以通过设置 您想要使用forced_allow_origin_value 的确切值。

    所以要发送Access-Control-Allow-Origin: *,你想要的确切值就是*

    【讨论】:

    • 非常感谢!在配置中添加forced_allow_origin_value 解决了我的问题。但是,在此之前,我需要将我的 NelmioCors 更新到 1.5 版,然后将* 放在 qoutes 中。 forced_allow_origin_value: '*'
    • 谢谢!它对我有用,但带有引号:forced_allow_origin_value: '*'
    • 这个解决方案基本上是为所有人打开了大门。当响应通过 HTTP 缓存提供时,我们需要能够重新计算 CORS 响应标头,因为该缓存也缓存标头。
    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2016-06-29
    • 2013-12-28
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多