http - 关于PHP设置content-length的问题。
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 12:58:51
0
1
1136

1.先说一下我这边的使用场景。就是客户端使用服务端的接口下载文件。服务端这边是直接获取二进制然后输出的。请问除了echo 二进制以外还有没有更合理的返回方式。

2.用PHP header('Content-Length: '.strlen($Download));设置Content-Length,这个设置实际上无效的吗?因为照理来说的话,本身http请求会根据输出的大小来设置Content-Length。即使我设置改变了 最终请求的Content-Length还是根据实际的大小。

3.还有一个问题就是比如我请求一个 10M的文件的二进制。用浏览器请求的话压根没有Content-Length这个头返回。用客户端那边请求能正常返回Content-Length。Content-Length的返回跟请求的方式也有关系?

过去多啦不再A梦
过去多啦不再A梦

全部回复(1)
漂亮男人

你的来源是二进制流?

1, 如果是文件,只是为了隐藏真实路径,可以尝试用如下方式:

readfile($filename)echo效率高

或者使用 X-SendFile技术

如果的确是二进制流,也可以尝试先缓存成文件了 然后 X-SendFile

2, header设置Content-Length是有效的,返回真实的大小即可。这个在一些下载软件比较重要,比如迅雷。
它会检测最终大小是否符合Content-Length

3, 浏览器会以Content-Length为参照,
但是当网络很糟糕的时候,超时、断流了,浏览器也会停止下载,最终得到的是一个不完整的文件,这个下载国外软件的时候很常见。
如果实际大小超过了Content-Length,浏览器也接受。

4, 所以即使没有Content-Length返回,浏览器也可以下载,等到服务端断流,浏览器就终止下载。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板