【发布时间】:2022-12-10 22:52:43
【问题描述】:
如何在静态文件上指定 CORS 策略并允许 HTTPOption(预检)请求?我正在尝试通过 XHR 请求将静态文件从应用程序 Y 检索到应用程序 X 中。但这会出现以下错误:
Access to XMLHttpRequest at 'Y/test.jpg' from origin 'X' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
似乎出现的第一个问题是 HTTPOption 请求返回 404 错误。这是为什么?它在缺少控制器端点时有意义,但在这种情况下,URL 指向一个文件。
在this answer 中,AspNetCoreModuleV2 似乎不知道如何处理HTTPOption。
如答案所示修改 web.config 后(从模块中删除 HTTPOption),我确实得到了 200 响应,最后一个障碍是实际的 CORS 错误本身。
因为 HTTPOption 在更改后不通过 AspNetCoreModuleV2 处理,所以我能想到的添加 CORS 标头的唯一方法是从 web.config 执行此操作。例如。:
<add name="Access-Control-Allow-Origin" value="*" />
通过这两项更改,应用程序X 可以正确加载数据。我确实认为这不是一个干净的解决方案,因为:
-
HTTPOption将无法在特定于控制器的端点上工作,因为它已从web.config中过滤掉 - CORS 标头将添加到所有请求中,而不是仅添加到静态文件中
- 未使用 .NET Core CORS (
AddCors/UseCors)
【问题讨论】: