Uploader Chrome (DropZone) 出现 ERR_SPDY_PING_FAILED 错误

Posted

技术标签:

【中文标题】Uploader Chrome (DropZone) 出现 ERR_SPDY_PING_FAILED 错误【英文标题】:ERR_SPDY_PING_FAILED error with Uploader Chrome ( DropZone ) 【发布时间】:2018-12-20 10:06:35 【问题描述】:

我有一个基于http://www.dropzonejs.com/的上传器

当我使用 Chrome 上传大于 3 MB ( 13 MB ) 的文件时,我在控制台日志中收到 ERR_SPDY_PING_FAILED 错误。

当我上传文件时,进度条卡在某个级别。这是我们收到此错误的时间。

我用 Safari 试过,火狐没有这个问题。

我用谷歌搜索,发现其他人也抱怨同样的问题。

这是来自 Chrome 的请求标头

Provisional headers are shown
Accept: application/json
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary4sLYTyIwAAXnftvv
Origin: https://www.example.com
Referer: https://www.example.com/upload/document
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/67.0.3396.99 Safari/537.36
X-Requested-With: XMLHttpRequest
------WebKitFormBoundary4sLYTyIwAAXnftvv
Content-Disposition: form-data; name="_token"

GiY0lmkggP4hlyhunGRQOOBa1k1dqsr44ZgHA41e
------WebKitFormBoundary4sLYTyIwAAXnftvv
Content-Disposition: form-data; name="file[0]"; filename="sdf_brz_lin.1.jpg"
Content-Type: image/jpeg


------WebKitFormBoundary4sLYTyIwAAXnftvv--

在这篇 *** 帖子中,他们提出了一些解决方案,但我无法实施他们的解决方案,因为它们是基于其他脚本的。

request stalled for a long time occasionally in chrome

他们提出了类似的建议

$(document).ready(function() 
    $.keepalive =     
            setInterval(function() 
               $.ajax(
                  url: '/ping.html',
                  cache: false
               );         
            , 60000);    
);

但我不知道如何将此解决方案集成到我的 dropzone 中。

我不想说如果访问者使用 chrome,你不能上传大于 X MB 的文件...

【问题讨论】:

【参考方案1】:

您好,就我而言,这是一个网络问题。因为如果我们将系统连接到 IPV6 网络,就会发生此问题。在 ipV4 上,上传就像魅力一样。

【讨论】:

【参考方案2】:

我只是追踪了其中一个。这是由于上传目标服务器的 HTTP2 接收窗口设置太造成的。

在客户端和服务器之间有足够的代理或其他东西,两个端点之间的总 TCP 缓冲区足以吞下上传结束,但直到很晚才完成传送。

浏览器厌倦了等待完成。当浏览器感到无聊时,它会变得偏执,并发送一个 HTTP2 PING 来检查连接是否仍然存在。 (鉴于到目前为止接收者实际上收到了多少 HTTP2 更新,这似乎是不必要的/一个错误!)

PING 进入与流量相同的多路复用 HTTP2 TCP 连接,并被困在那里,直到达到 PING 超时。客户端失去信心并终止连接,这无济于事,因为它实际上还活着!

通过将 HTTP2 接收窗口减小到一个合理的值,浏览器将不会被允许发送足够多的数据,从而导致巨大的交通堵塞。

如果您无法让服务器执行此操作,您可以使用浏览器 F12 网络诊断工具将上传速率限制为最多匹配链中最小带宽瓶颈的值- 不能形成交通堵塞,这意味着 PING 不能超时。

您可能会将此称为 Bufferbloat 问题的表现。

【讨论】:

以上是关于Uploader Chrome (DropZone) 出现 ERR_SPDY_PING_FAILED 错误的主要内容,如果未能解决你的问题,请参考以下文章

ajax uploader(使用nginx)

Dropzone.js兼容Firefox

在 iOS 上的 Fine-uploader 中关闭相机

Dropzone.js 上传进度条不显示

Dropzone 跨平台缩略图生成

百度开放云 BOS Uploader