J2ME 出现 HTTP 411 错误 -> nginx + apache + django
Posted
技术标签:
【中文标题】J2ME 出现 HTTP 411 错误 -> nginx + apache + django【英文标题】:HTTP 411 error with J2ME -> nginx + apache + django 【发布时间】:2010-12-30 02:38:12 【问题描述】:我们有一个使用 django 构建的基于 Web 的生产应用程序。它部署在使用 apache 代理的 nginx 上,通过 WSGI 处理 django 应用程序。操作系统是 Ubuntu。
除了基于 Web 的前端,我们最近还开发了一个 J2ME 客户端,用于通过手机上传文件。 J2ME 传输传输编码设置为“分块”且内容长度设置为零的文件;这是 J2ME 框架的标准方式,显然无法更改。
问题是 nginx 和 apache 都不允许零内容长度的分块数据并返回 HTTP 411 error response。 django 似乎也有问题,但可以轻松修补。
网上很少有解决方案建议重新编译 nginx 和 apache,但我不想深入讨论。有没有更简单的解决方案?
【问题讨论】:
我不明白为什么要为 J2ME 设置分块和零长度,除非您的移动网络运营商覆盖了 HTTP 标头。 没有在 J2ME 客户端上禁用分块的标准方法。 【参考方案1】:根据我的经验,如果您使用 OutputStream.flush(),J2ME 会切换到分块编码。避免刷新,只需写入 OutputStream 然后立即关闭它。我能够使用 J2ME 向 Apache/Django 设置提交 POST 就好了。由于使用了 flush(),我得到了 411 错误。一旦我删除它,它工作得很好。 Content-Length不是我手动设置的,是自动设置的。
【讨论】:
开个玩笑,如果正文太大,分块编码就会回来。我最终使用 mod_proxy 将分块编码缓冲到常规请求中。 ***.com/questions/284741/… 我试过 mod_proxy 但在某些请求上(主要是在使用 deviceside=True 建立连接时)它不起作用,并且我在代理日志中收到类似于以下内容的错误:给定 Content-Length 没有匹配读取的正文字节数...找到文件结尾:代理:从yyyy()传递请求正文失败到xxxx:8080 ...代理服务器的处理程序返回无效结果代码70014以上是关于J2ME 出现 HTTP 411 错误 -> nginx + apache + django的主要内容,如果未能解决你的问题,请参考以下文章