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 错误,尽管我在服务器上指定了一个来源?
在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为啥。