CORS 不允许在 apache2 服务器上提供静态文件

Posted

技术标签:

【中文标题】CORS 不允许在 apache2 服务器上提供静态文件【英文标题】:CORS wont allow serving static files on apache2 server 【发布时间】:2022-01-01 15:09:03 【问题描述】:

我有一个快速服务器,它允许前端从数据库中获取信息,它工作正常。 Cors 设置了前端白名单,但是尝试获取图像(已经上传并保存)除了 500 错误之外什么都没有。我尝试禁用 cors 并且效果很好,但是任何来源都可以做一些我不希望这个网站做的事情。我使用启用了代理和 proxy_http mod 的 apache,因此它可以访问在 pm2 上运行的 express js 服务器。服务器js上的代码:

const whiteList=['domain.com'];
const corsOptions = 
  origin:function(origin, callback)
    if(whiteList.indexOf(origin) !== -1)
      callback(null, true);
     else
      callback(new Error('Not allowed by CORS'));
    
  

app.use(cors(corsOptions));

我什至尝试在 apache 中设置 cors 标头,但它不起作用,因为它仍然允许来源而不是列表。

【问题讨论】:

domain.com 不是origin;它应该以http://https:// 为前缀才能被视为来源。另外,您的 origin 变量是如何声明的?它甚至在任何地方声明? 兄弟,我只称它为 domain.com,所以我没有公开显示实际的白名单信息。就像我说的那样,它工作正常,直到我需要从服务器提供静态文件。 你在“兄弟”中失去了我。 【参考方案1】:

所以我可以通过这样做来解决这个问题:

app.use(cors(origin: "https://example.com", allowedHeaders: ["Authorization", "Content-Type"]));

实际发现的问题是服务器没有发回所有 cors 标头,包括:Access-Control-Allow-Headers 塞满了所有内容。

这似乎可能是 cors 包的一个错误,因为它的参数在他们自己的对象中管理混乱了服务器返回的内容,所以现在它看起来有点难看。

我什至确实遵循了 cors 文档所说的内容,但这会导致更多奇怪的问题。

【讨论】:

我确实认为可能存在一些与 cors 和头盔冲突的代码,可能是因为头盔配置了发回的标头,所以可能会发生这种情况。

以上是关于CORS 不允许在 apache2 服务器上提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache 中启用了 CORS,但 AJAX 不起作用(chrome 表示不允许来源)

为啥我总是得到一个不允许通配符 * 的 cors 错误,尽管我在服务器上指定了一个来源?

CORS 来源允许参数维护

在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为啥。

javascript [在服务器上启用CORS]允许服务器请求CORS #javascript #node #cors

CORS 缺少允许来源