【问题标题】:Connection reset when uploading files to Azure Web App over HTTPS通过 HTTPS 将文件上传到 Azure Web App 时连接重置
【发布时间】:2016-11-14 08:36:30
【问题描述】:

在我们目前正在开发的 Azure 托管的 Web 应用程序中,我们在上传文件时遇到了一个奇怪的问题,无论是作为多部分表单数据还是通过 AJAX 请求。在上传文件时,浏览器会间歇性地报告连接已被重置,即服务器已终止连接,并且我无法辨别出真正的模式。 Fiddler 为我提供了最详细的错误信息:

HTTP/1.1 504 Fiddler - Send Failure

[Fiddler] SendRequest() failed: System.IO.IOException Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host. < An existing connection was forcibly closed by the remote host

只有在通过 HTTPS 运行时才会发生这种情况(整个站点设置为针对所有请求重定向到 HTTPS)。如果我删除此重定向,我可以通过 HTTP 可靠地上传。

表单和 AJAX 请求由异步 MVC 控制器处理,这些控制器访问发布数据中任何 HttpPostedFileBase 对象上的流 - 然后将这些流上传到 Azure Blob 存储。虽然我不确定这些控制器是否正在处理请求,但考虑到在负载完全上传之前连接已关闭?

有什么想法吗?真的把我的头发扯掉了。

【问题讨论】:

  • 你找到解决方案了吗?我的应用程序也有同样的问题。
  • @DaniloVulović 我的解决方案见下文。

标签: asp.net asp.net-mvc forms azure https


【解决方案1】:

我发现(经过大量挖掘)这是由于我的网络上的 MTU 设置不正确造成的;具体来说,我的 FTTC 的 PPPoE 连接的 MTU 为 1492,而不是预期的 1500。不久前,BT 推荐使用 1492 作为 MTU,但后来这种情况发生了变化。稍小的 MTU 会导致传输中的数据包过度碎片化,这些数据包更容易丢失数据包(假设有更多的数据包)。我的连接被远程服务器(Azure)重置的原因是数据包丢失 - 在多次尝试上传文件后,由于数据包丢失,所有这些都失败了,服务器已经受够了并关闭了连接。

一个非常奇怪的问题,但我很高兴找到解决方法!

【讨论】:

  • 太棒了。你是怎么知道的?我的意思是,您如何将 HTTP 错误链接到 MTU 事物?日志? Wireshark?
  • 我使用 Wireshark 尝试了解发生了什么,并注意到大量失败的传输。当我尝试在不同的网络(例如在家)上上传时,一切正常,我没有看到这些错误。我不记得我是如何最终意识到是 MTU 出了问题,但它确实修复了它!
  • 太棒了!问题是,我们能否解决 MVC 应用程序和 Azure 中的问题,而不是重置 MTU。我们在使用几个不同的 WI-FI 网络以及全球有线网络时遇到了这个问题。这意味着我们需要要求用户更改 MTU
猜你喜欢
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 2020-03-02
相关资源
最近更新 更多