17

您是否可以通过 HTTP 请求发送标头,告诉 Web 服务器仅向您发送响应的标头而不发送正文内容?

我正在使用 cURL 发出此类请求,但从技术上讲,我认为应该可以将简单的标头作为请求的一部分发送。

例如,存在 304 Not Modified HTTP 响应代码。当您使用缓存标签或日期时间信息向服务器发出请求时,服务器可以检测到该请求并仅返回标头作为响应,告诉用户代理使用其缓存作为响应。这意味着当涉及到带宽时,来自服务器的响应非常非常小。

但是,您是否可以将标头发送到服务器,使服务器只返回标头而没有正文内容?

这里的想法是发出 HTTP 请求,否则可能会返回大量数据,非常小。例如返回 JSON 数据或日志的 API 调用,而实际上用户代理唯一感兴趣的是确保请求通过,而不是其他。这是为了在主体可能存在的情况下最小化进出服务器的带宽,但在上下文中对于用户代理正在执行的操作没有任何必要。

虽然可以设计一个 API 来侦听特定的自定义标头或诸如此类的东西,但除非必须,否则我宁愿不这样做。但是我一直无法找到是否有一种标准化的方式来发出一个告诉服务器不要发送任何正文内容的 HTTP 请求?

4

2 回答 2

27

如果服务器支持它,则有HEAD操作(相对于 GET 或 POST)。这告诉服务器只发送标头,不发送正文。

HEAD 方法与 GET 相同,只是服务器不能在响应中返回消息体。

于 2012-08-01T07:30:28.163 回答
4

你正在寻找动词HEAD。如果您将 CURL 与 PHP 一起使用,则可以解决问题:

curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $c, CURLOPT_CUSTOMREQUEST, 'HEAD' );
curl_setopt( $c, CURLOPT_HEADER, 1 );
curl_setopt( $c, CURLOPT_NOBODY, true );

如果您使用的是 PHP(在不同的情况下也很可能计数),脚本将继续运行,直到发送任何输出(注释下的注释REQUEST_METHOD)。因此,如果您担心服务器压力,您可能需要其他适合的东西。

对我来说,您似乎更多的是在寻找“ping”,那么为什么不简单地请求一个除了返回某种 OK 之外什么都不做的文件,甚至可能只是 HTTP 200 OK(即一个空文件)?

于 2012-08-01T07:30:08.053 回答