在禁用调试模式的情况下对我的 Symfony 5 应用程序的 API 调用返回 CORS 错误

Posted

技术标签:

【中文标题】在禁用调试模式的情况下对我的 Symfony 5 应用程序的 API 调用返回 CORS 错误【英文标题】:API call to my Symfony 5 app with debug mode disabled returns CORS error 【发布时间】:2021-10-13 17:53:43 【问题描述】:

我的 Symfony 5 应用程序作为我的 API 有这个问题。我正在从同一域和不同子域中的另一个应用程序向我的 Symfony 应用程序发出请求。

在我的 Symfony 应用程序中将调试模式设置为 true APP_DEBUG = 1 时一切正常。但是,如果我禁用调试模式 APP_DEBUG = 0,那么来自其他应用程序的请求会导致 CORS 错误:

Access to XMLHttpRequest at 'https://api.mamacita365.com/api/getmeals' 
from origin 'https://app.mamacita365.com' has been blocked by CORS policy: 
No 'Access-Control-Allow-Origin' header is present on the requested resource.

我正在使用nelmio/cors-bundle - 这里是nelmio_cors.yaml

nelmio_cors:
    defaults:
        origin_regex: true
        allow_credentials: true
        allow_origin: ['https://api.mamacita365.com', 'https://app.mamacita365.com']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['Content-Type', 'Authorization']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/': null

这里是.env.local.php

<?php

// This file was generated by running "composer dump-env prod"

return array (
  'APP_ENV' => 'prod',
  'APP_DEBUG' => 0, // if equals 0 then CORS error, if equals 1 then OK
  // ...
);

【问题讨论】:

allow_origin 必须是匹配允许来源的正则表达式列表。请记住使用 ^ 和 $ 来明确定义正则表达式的边界。 (参考文档) 我改了,但没有效果。 DEV 正在运行,但 PROD 仍然存在与 CORS 相关的问题 【参考方案1】:

手动清除缓存(/var/cache/prod文件夹)或通过命令php bin/console cache:clear --env=prod

【讨论】:

这行得通。我还将allow_origin 更改为基于正则表达式的值

以上是关于在禁用调试模式的情况下对我的 Symfony 5 应用程序的 API 调用返回 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章

Symfony HWIOAuthBundle - 如何禁用自动注销?

如何在没有ORM的情况下对DAO进行单元测试

如何在 iOS AdHoc 构建上调试 Firebase

如何在生产 Vue.js 中禁用源映射或调试模式 - Webpack

如何向禁用右键单击的 jQuery 添加异常?

禁用生产 Symfony 中的错误