.htaccess添加Cors-header有时会丢失

fbcarpbf  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(192)

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

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

我的应用多次执行相同的后端调用。有时候,在进行了三到四次之后(进行得很好),突然调用中缺少了CORS头文件(自然地,CORS启动了,前端没有得到任何响应)。
显然.htaccess文件有时会被忽略。
Apache-error log什么也没说。
知道是什么原因导致这个问题或者如何调试吗?

  • FF 102.10.0esr
  • 浏览器113.0
  • Apache 2.4.56
yhxst69z

yhxst69z1#

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是 * 可选 *,因为这是默认值。)
然而,似乎您(错误地)提供了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 *

这可能会有点混乱/混乱。onsuccessalways(称为“条件”)实际上是两组分开的报头。您可以向两个组添加报头,如果您想要edit(或mergeunset)现有报头,则需要知道报头最初在哪个组中设置/添加。
参考文献:

  • https://httpd.apache.org/docs/current/mod/mod_headers.html#header

相关问题