app

04 23,2014

APP客户端上传文件引发NGINX返回411错误

昨天和android客户端联调一个上传接口的时候,客户端报错:”java.io.FileNotFoundException”,因为这个和IOS调试是正常的,然后我这边也没找到程序日记的请求记录,还以为是客户端的问题。

但是客户端查找了半天也没发现问题所在,没办法,查了下nginx的access日记。恍然发现,请求已经过来了,只是nginx返回411错误。

nginx给出的官方解释有三种情况会引发nginx弹411回去

client sent invalid "Content-Length" header
client sent method without "Content-Length" header
client sent "Transfer-Encoding: chunked" header

这个api使用的server正是nginx, 使用multipart提交图片文件的时候因为它忽略或省略了文件的真正的长度, 所以(通过抓包发现)在request header里就压根没有Content-Length. 那显然符合上面的第二种情况.

刚开始让android那边修改代码的,但是涉及到升级的问题,所以最好让服务端解决,google发现了这个nginx的module:nginxHttpChunkinModuleNginxHttpChunkinModule

nginx1.3.9以上的版本不需要这个模块了,所以这个针对的是nginx1.3.9以下的版本。