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 错误的主要内容,如果未能解决你的问题,请参考以下文章