.htaccess 添加的 Cors-headers 有时会丢失

问题描述 投票:0回答:1

因为前端在另一个端口上运行,我有用于开发的 .htaccess 文件(生产中没有 CORS,不用担心):

Header add Access-Control-Allow-Origin *
Header add Access-Control-Allow-Headers *
Header add Access-Control-Allow-Methods *

我的应用多次执行相同的后端调用。有时在其中三四个(一切顺利)之后,调用中突然缺少 CORS 标头(CORS 自然启动,前端没有得到任何响应。)。

显然 .htaccess 文件有时会被忽略。

Apache 错误日志什么也没说。

知道什么会导致这个或如何调试吗?

  • FF 102.10.0esr
  • 铬 113.0
  • 阿帕奇 2.4.56
.htaccess header apache2
1个回答
1
投票
Header add Access-Control-Allow-Origin *
Header add Access-Control-Allow-Headers *
Header add Access-Control-Allow-Methods *

这些标头只会在“成功”(即 2xx HTTP 状态)响应时设置,因为默认“条件”(或标头的group)是

onsuccess
。换句话说,上面是一样的:

Header onsuccess add Access-Control-Allow-Origin *
Header onsuccess add Access-Control-Allow-Headers *
Header onsuccess add Access-Control-Allow-Methods *

onsuccess
optional,因为这是默认值。)

但是,您似乎(错误地)提供了 403 Forbidden 响应,因此未设置这些标头(您会看到 CORS 错误)。为了在 2xx 和非 2xx 响应上设置标头,您需要改用

always
条件。例如:

Header always add Access-Control-Allow-Origin *
Header always add Access-Control-Allow-Headers *
Header always add Access-Control-Allow-Methods *

这可能会有点混乱/混乱。

onsuccess
always
(称为“条件”)实际上是两个独立的标题组。您可以向两个组添加一个标题,如果您想
edit
(或
merge
unset
)一个现有的标题,那么您需要知道标题最初是在哪个组中设置/添加的。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.