我碰到这个post,这显示我的问题是确切的
http://nginx.org/en/docs/faq/chunked_encoding_from_backend.html
但浏览器现在使用http 1.1,所以我真的不明白。 我们的后端是playframework,我不介意修复它,但我不明白什么是不工作特别是因为Firefox,Safari浏览器,铬ALL下载响应就好,没有问题。 只有当我们坚持把NGINX放在中间的时候,事情就会破裂,我们在json响应中会得到额外的数据。
任何想法如何解决这个问题? 正如上面的文件似乎是错误的,因为我们现在在更高版本的http加上浏览器似乎工作得很好。
谢谢,Dean
当你的设置看起来像浏览器 – > nginx – > 后端时 ,当我们谈论nginx和后端之间的连接时, 浏览器能够处理什么或多或less是不相关的。
nginx默认使用的后端协议是HTTP / 1.0, RFC 2616明确禁止使用分块编码:
服务器不能发送传输编码到HTTP / 1.0客户端。
如果您的后端返回对HTTP / 1.0请求的分块响应,则无论事实是否在浏览器中看到问题,它都会做错误的事情并需要修复。 常见的结果是块大小的string( 常见问题中的hex数字47 )被各种HTTP / 1.0客户端解释为响应主体的一部分。
在nginx的(老版本)的情况下,以前发生的事情是,当将数据传递给浏览器(会话HTTP / 1.1,因此被低估和分块)时,nginx添加了它自己的分块编码,不正确的主体embedded了块大小的string。 因此,浏览器用nginx的方式来查看响应主体。
从上面应该清楚,只有一个正确的方法来解决问题 – 修复后端 。 另一方面,对于较新的nginx版本(1.1.4+),您不应该看到常见问题解答中列出的问题。 如果你看到 – 这意味着你所使用的nginx版本的假设是错误的,或者你没有使用proxy_pass(但是一些其他的后端模块?),或者你有多个问题。 使用nginx debugging日志可能有助于了解这里发生了什么。 或者你可以开始修复后端(无论如何这是正确的事情)。
升级nginx修正了这个问题。 有一个硬编码的url,所以我必须有一个LB可以做分块。 这是没有办法的。 我们有时使用分块(chunking)将数据库中的数据减less到数千兆字节。 我们必须有http 1.1分块工作。
无论如何,如果你遇到这个问题,升级nginx,它修复它…现在没有理由触及后端,因为所有的浏览器现在工作,一切都很好。