get_headers如何在后台工作


How does get_headers work in the background

我试着搜索这个,我相信我知道答案,但我没有错,所以我来了..

调用 get_headers 时,即使函数只返回标头,我也会检索整个文件,还是会像预期的那样只检索标头而没有其他内容?

我猜的是最后一个,但如果我错了,这会导致一些严重的问题。我还注意到,我可以更改一个全局设置来发送 HEAD 请求而不是默认的 GET 请求,女巫就是我问自己到底发生了什么。


编辑

也许这个功能是更好的选择? stream_get_meta_data还是他们实际上做同样的事情?

如果你熟悉C,你也可以看看源代码。

此处定义了该函数。我快速查看了一下,似乎这是一个仅标头的请求,请参阅第 715 行:

STREAM_ONLY_GET_HEADERS

GET

请求指定资源的表示形式。请求使用 GET 应该只检索数据,不应该有其他影响。(这 其他一些 HTTP 方法也是如此。W3C 已发布 关于这种区别的指导原则,说:"Web应用程序 设计应以上述原则为依据,但也应以 相关限制。

请求与对应于 a 的响应

相同的响应 GET 请求,但没有响应正文。这对于 检索写入响应标头中的元信息,无需 必须传输整个内容。

维基百科/Hypertext_Transfer_Protocol

PHP 文档明确指出普通get_headers()使用 GET 请求,但您可以强制它使用 HEAD 代替,如下所示:

<?php
// By default get_headers uses a GET request to fetch the headers. If you
// want to send a HEAD request instead, you can do so using a stream context:
stream_context_set_default(
    array(
        'http' => array(
            'method' => 'HEAD'
        )
    )
);
$headers = get_headers('http://example.com');
?>

不幸的是,你是对的,只需阅读PHP手册:

get_headers() 返回一个数组,其中包含服务器为响应 HTTP 请求而发送的标头。

另请查看示例。

好吧,下次我应该花更多的精力在问题表述上。

是的,如果请求类型设置为 GET(标准),您将获得全部内容。您可以将其更改为 HEAD,但这不是您想要的。