【发布时间】:2014-07-01 20:01:36
【问题描述】:
使用Varnish 4,我有一组后端以有效的Content-Length 标头响应,而没有Transfer-Encoding 标头。
在客户端第一次点击时,Varnish 不会使用这些标头响应客户端,而是删除Content-Length 标头并将Transfer-Encoding: chunked 添加到响应中。 (有趣的是,有效载荷中似乎没有任何块 - 它是一个连续的有效载荷)。
这会给尝试基于 Content-Length 标头进行分段大小、带宽等分析的 Flash 视频播放器等客户端带来严重问题。他们的分析失败了,他们不能做多比特率流等事情。
我尝试了一些半显而易见的事情,例如:
-
beresp.do_stream = true beresp.do_gzip = falseunset req.http.Accept-Encoding
示例后端响应:
HTTP/1.1 200 OK
Cache-Control: public, max-age=600
Content-Type: video/mp4
Date: Tue, 13 May 2014 19:44:35 GMT
Server: Apache
Content-Length: 796618
Connection: keep-alive
清漆响应示例:
HTTP/1.1 200 OK
Server: Apache
Cache-Control: public, max-age=600
Content-Type: video/mp4
Date: Tue, 13 May 2014 23:10:06 GMT
X-Varnish: 2
Age: 0
Transfer-Encoding: chunked
Accept-Ranges: bytes
对象的后续加载 do 包括 Content-Length 标头,而不是第一次加载到缓存中。
VCL:https://gist.github.com/onethumb/e64a405cc579909cace1
varnishlog 输出:https://gist.github.com/onethumb/e66a2bc4727a3a5340b6
【问题讨论】:
-
也有这个问题,等待更新不要绕过流光。
标签: http varnish chunked transfer-encoding http-content-length