【发布时间】:2015-07-06 16:51:38
【问题描述】:
简而言之,如果我发送的 HTTP POST 带有较大的 (20-30mb) 有效负载,并且在向服务器发送请求的过程中连接中断,我可以恢复在连接断开之前发送的 10mb+ 吗?
在我在 NGINX 上测试 PHP 时,如果在上传过程中连接断开,我的 PHP 似乎永远不会启动。我在脚本的顶部有 ignore_user_abort(1),但这似乎只有在收到完整的请求后才相关。
是否有某个配置设置可以让我看到收到的所有请求,即使它没有收到完整的请求?
我主要通过间歇性连接发送这些文件,所以我想尽可能多地发送每个请求,然后询问服务器从哪里继续。就目前的情况而言,我必须将文件分段发送,如果有错误则减小片段的大小,或者如果一段时间内没有任何错误则增加大小。这非常缓慢且浪费带宽。
=======
我应该澄清一下,我所追求的不仅仅是一次上传一个大文件,就像连接中断一样,我可以从我离开的地方继续吗?在我所有的测试中,如果没有收到完整的帖子,整个请求就是垃圾,PHP没有通知,所以我必须从头开始。
我必须运行一些测试,但你是说如果我对请求使用分块传输编码,PHP 会在断开连接之前获得所有接收到的块吗?值得一试,当然最好是在连接中断的情况下发布多个较小的帖子。
感谢您的建议。
【问题讨论】:
-
许多分块库会处理此类情况,因此您不必这样做。我强烈推荐使用一个,因为它允许更大的文件以及可恢复的上传。