【发布时间】:2012-07-20 23:49:32
【问题描述】:
我们有一个支持使用 plupload 上传文件的 Backbone.js 应用程序。上传通过代理(目前是 rack-reverse-proxy,但很快切换到直接 nginx)通过 API 发送到单独的 Rails 应用程序。
这个 API 已经使用了很长时间,可以处理数百 MB 的上传。我们认为这不是问题。
但是,当通过 BB.js 和代理执行上传时,它们可能会在不同的点停止,但主要是在 1.5MB 以下的点。
值得注意的是,在相同的情况下,尝试上传多个小于 1MB 的文件都可以正常工作。我可以上传 100 个 1MB 的文件,但不能上传超过 2MB 的文件。
我们从 BB.js 应用程序中获得的一些例外是:
- 未捕获的语法错误:输入意外结束
- SyntaxError:JSON 解析错误:意外的 EOF
解决这个问题的最佳方法是什么?罪魁祸首似乎是网络连接速度较慢(通过基于光纤的家庭网络上传到服务器往往会完成,而在工作中通过 DSL 线路上传往往会失败),但我无法想象它是那么简单.
这是我们的代理设置吗?切换到 nginx 会解决这个问题吗?为此目的设置 nginx 的最佳方法是什么?
编辑回答毛里西奥的评论:
服务器没有返回任何内容。以下是 WebKit Network Inspector 报告的标头(主机名已更改):
Request URL:http://our.site.com/api/files
Request Headersview source
Content-Length:131661475
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryHwVBiFW8AIuh18Bt
DNT:1
Origin:http://our.site.com
Referer:http://our.site.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
Request Payload
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="name"
861-railsconf2012-using-backbone-js-with-rails-patterns-from-the-wild-large.mp4.mpg
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="file_entry[folder_id]"
32984
------WebKitFormBoundaryHwVBiFW8AIuh18Bt
Content-Disposition: form-data; name="file"; filename="861-railsconf2012-using-backbone-js-with-rails-patterns-from-the-wild-large.mp4.mpg"
Content-Type: video/mpeg
------WebKitFormBoundaryHwVBiFW8AIuh18Bt--
之后,没有任何反应。检查员将状态和时间都报告为待处理。在最近的这种情况下,传输大小为 0B,尽管我知道数据已发送,因为我可以监控达到 900K/秒的传出流量可能 10-15 秒,然后恢复正常(1-2K/秒)。
【问题讨论】:
-
浏览器接收到的输出是什么?您是否使用 CURL 或类似的方法进行相同的调用并查看它是否通过代理工作?
-
毛里西奥,我已经添加了详细信息。如果您需要更多信息,请告诉我。
标签: file-upload backbone.js proxy nginx rack