空中继线字符导致连接关闭和 Chrome 在浏览器中记录 CORS 错误

Empty Trunk Character caused Connection Close and Chrome logged CORS error in browser

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

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

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

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

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

这让我觉得这可能是分块 Transfer-Encoding 的问题(如第三张图片所示),所以我尝试通过为 Response header 分配 ContentLength 来禁用分块编码。但问题仍然存在。

对这个错误有点绝望。任何 insight/suggestion 将不胜感激!

好的。似乎是根本原因 "detected" -- 我们公司自动将用户文件夹同步到虚拟驱动器,例如 Pictures/Documents/Temp 文件夹都同步到虚拟驱动器。该功能可确保不会丢失数据并更轻松地更换工作站,但我们在尝试执行 copy/paste 或打开任何用户文件夹时遇到了很多延迟。因此,一旦我进入飞行模式或仅按 F5 而不是 Ctrl+F5,我就不会再遇到间歇性 CORS 问题。我猜 Chrome 认为这是 CORS 问题,可能是因为响应是由这个 'proxy' 层注入的。

如果有人做过以下事情:

  1. 在服务器端遵循完全正确的 CORS 设置。和CORS 登录全部成功。例如:预检returns204; WebDavModule 已被禁用,因此不会阻止 PUT 和 DELETE; origin 包含在 CORS origin list 列表中;有 'Vary: Origin' 响应 Header。
  2. 试图通过在 header 中设置正确的响应长度来禁用服务器响应的分块传输编码。
  3. 试图在响应 header 中禁用缓存或将 Cache-Control 设置为 'no-cache'。
  4. Fiddler 的响应能够从 500 变为 200,并在等待一段时间后收到完整响应。
  5. 取消选中 "LAN Setting" 中“连接”选项卡(Internet 配置)中的自动检测配置。
  6. 在 web.config 中将托管模式设置为 'Inprocess'。

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