有没有办法强制HTTP服务器通过libcurl向我发送一个特定的头?

有没有办法强制HTTP服务器通过libcurl向我发送一个特定的头?,c,http,libcurl,C,Http,Libcurl,特别是内容长度。当我向本地服务器发送HEAD请求时,我并不总是收到请求文件的大小。 例如,当它是159字节index.php时: HTTP/1.1 200 OK Date: Wed, 31 Aug 2016 11:34:16 GMT Server: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.20 X-Powered-By: PHP/5.6.20 Content-Type: text/html; charset=UTF-8 和40 MB左右的ran

特别是
内容长度
。当我向本地服务器发送HEAD请求时,我并不总是收到请求文件的大小。
例如,当它是159字节index.php时:

HTTP/1.1 200 OK
Date: Wed, 31 Aug 2016 11:34:16 GMT
Server: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.20
X-Powered-By: PHP/5.6.20
Content-Type: text/html; charset=UTF-8
和40 MB左右的random.pdf文件:

HTTP/1.1 200 OK
Date: Wed, 31 Aug 2016 11:34:23 GMT
Server: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.6.20
Last-Modified: Thu, 25 Aug 2016 11:19:59 GMT
ETag: "2807fb2-53ae39413d130"
Accept-Ranges: bytes
Content-Length: 41975730
Content-Type: application/pdf

我能不能强制它?

不,你不能。要么尺寸可用,要么不可用

特别是在php脚本中,内容是动态生成的,并且事先不知道大小


本质上,
HEAD
的作用与
GET
相同,但省略了有效负载。

那么,在php生成内容之后,服务器为什么不生成内容长度头呢?@KarashevichB。因为内容没有缓冲(同样,由于其大小未知)。相反,它会立即通过行发送,因此无法添加额外的标题。
内容长度:
在HTTP/1.1中,当已知时是强制性的,当未知时是分块处理。如果您不知道,当长度已知时,必须使用
内容处置:chunked
或切换到
HTTP/1.0
content length
HTTP/1.1
中的必填标题字段。如果您没有收到,是因为
HEAD
请求请求一个没有有效负载(没有内容)的响应,或者因为它不知道,在这种情况下,您必须接受
内容处置:chunked
(不知道这是否完全如图所示,请检查rfc),因此在HEAD响应的情况下
内容长度
应该为零(不包括在内)。