在禁用调试模式的情况下对我的 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 - 如何禁用自动注销?