0

我们的前端是 Angular,后端是 .Net Core 2.2。从前端调用到后端时,我遇到了间歇性 CORS 错误(或可能是其他问题)。

当我们在 Chrome 中调用后端 API 时,Chrome 有时会在控制台中抛出错误“...已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”,导致 webpag 无法加载. 发生错误时,没有响应内容,也没有响应头。当我禁用缓存(使用标头或 chrome 的 devtool)并禁用 CORS(使用 Chrome 扩展程序)时,可能会发生此问题。

我猜浏览器无法解析响应正文,所以我使用 fiddler 来跟踪响应:

最初我只得到 Empty Trunk "30 0D 0A 0D 0A" 并且 Fiddler 收到 500 错误。同时,Chrome 抛出 CROS 错误,网页无法加载。

响应大小为 0

初始错误标头 - 关闭连接

非法空箱体 30 0D 0A 0D 0A

如果我等待 30 秒到 1 分钟,Fiddler 记录从 500(失败)变为 200(成功):

分块传输编码

好的标题

良好的样品身体

这让我觉得这可能是分块传输编码的问题(如第三张图所示),所以我尝试通过为响应标头分配 ContentLength 来禁用分块编码。但问题仍然存在。

对这个错误有点绝望。任何见解/建议将不胜感激!

4

1 回答 1

0

好的。似乎根本原因“检测到”——我们公司自动将用户文件夹同步到虚拟驱动器,例如图片/文档/临时文件夹都同步到虚拟驱动器。该功能可确保不会丢失数据并更轻松地更换工作站,但在尝试复制/粘贴或打开任何用户文件夹时会遇到很多延迟。因此,一旦我进入飞行模式或只按 F5 而不是 Ctrl+F5,我就不会再遇到间歇性 CORS 问题了。我猜 Chrome 认为这是 CORS 问题,可能是因为响应是由这个“代理”层注入的。

如果有人做过以下事情:

  1. 在服务器端遵循完全正确的 CORS 设置。并且 CORS 日志记录都是成功的。例如:预检返回 204;WebDavModule 已被禁用,因此不会阻止 PUT 和 DELETE;Origin 包含在 CORS 来源列表列表中;有“Vary: Origin”响应标头。
  2. 尝试通过在标头中设置正确的响应长度来禁用服务器响应的分块传输编码。
  3. 尝试禁用缓存或在响应标头中将 Cache-Control 设置为“无缓存”。
  4. Fiddler 的响应能够从 500 变为 200,并在等待一段时间后收到完整的响应。
  5. 取消选中连接选项卡(Internet 配置)中“LAN 设置”中的自动检测配置。
  6. 在 web.config 中将 hostingmode 设置为“Inprocess”。

请检查贵公司是否有类似的同步设置...

于 2019-08-31T04:15:26.637 回答