【发布时间】:2017-10-12 13:13:13
【问题描述】:
我正在尝试在创建文件时(这需要几秒钟)将文件发送给用户。我可以估计它的大小到最接近的千字节。
如果我创建标头并在我的估计中添加额外的千字节(以补偿小错误),浏览器会认为下载失败。
我知道我可以完全不考虑长度,但认为用户体验没有那么好。
【问题讨论】:
标签: php http stream http-headers
我正在尝试在创建文件时(这需要几秒钟)将文件发送给用户。我可以估计它的大小到最接近的千字节。
如果我创建标头并在我的估计中添加额外的千字节(以补偿小错误),浏览器会认为下载失败。
我知道我可以完全不考虑长度,但认为用户体验没有那么好。
【问题讨论】:
标签: php http stream http-headers
RFC 7230 (https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2) 规定:
如果发件人关闭连接或收件人之前超时 接收到指定数量的八位字节,接收者必须 认为消息不完整并关闭连接。
这意味着 content-length 标头不能大于实际内容。
将 content-length 标头设置为小于下载内容并没有什么意义,但我认为我们都同意这不是一个好主意。
所以内容长度标头,惊喜 - 惊喜,应该反映下载的真实大小。
几乎总有一种方法可以获取下载的实际大小,您确定在您的情况下这是不可能的吗?
您不能在下载中添加填充以使其大小与标题中提到的大小完全相同?
由于您没有告诉我们有关下载本身的任何信息,因此我真的无法提供更多帮助。
【讨论】:
Content-Length 小于实际消息,客户端将停止从套接字读取。如果您无法事先确定该尺寸,请咨询RFC 7230, sec. 3.3.3。