PHP对HEAD请求的响应

oom*_*omp 4 php http litespeed

我有一个PHP脚本,按字节范围提供PDF文件的一部分.

如果收到HTTP HEAD请求,它应该发送回头(包括PDF文件大小)但不发送实际文件内容.我试过这个:

header('HTTP/1.1 200 OK');
header('Content-Type: application/pdf');
header('Accept-Ranges: bytes');
header('Content-Length: '.filesize($Pathname));
die;
Run Code Online (Sandbox Code Playgroud)

问题是某些东西(我假设web服务器== LiteSpeed)用 - 取代了Content-Length标题Content-Length: 0- 这违背了整个目的.

任何人都可以建议我应该做什么?谢谢

Iur*_*dov 6

从w3c超文本传输​​协议 - HTTP/1.1:

当在允许消息体的消息中给出Content-Length时,其字段值必须与消息体中的OCTET数完全匹配.HTTP/1.1用户代理必须在收到并检测到无效长度时通知用户.

和:

Content-Length实体头字段指示实体主体的大小,以十进制数量的OCTET发送给接收者,或者在HEAD方法的情况下,实体主体的大小已经发送到请求是GET.

所以,我想,如果您向服务器发送真正的HEAD请求,您的代码将正常工作.

  • "我看不出真正的HEAD请求会有什么不同" - 我可以.这坚定地将责任归咎于Web服务器的大门而不是PHP或您的代码(假设您在响应HEAD请求时获得相同的行为). (2认同)