HEAD 请求与 GET 请求

4 投票
3 回答
3251 浏览
提问于 2025-04-17 04:38

我一直觉得,使用 HEAD 请求比 GET 请求要快(不管资源有多大),所以在某些情况下会更有优势。

不过,当我在 Python 中发起一个 HEAD 请求(针对一个超过 5MB 的动态生成资源)时,我发现它所花的时间和 GET 请求差不多(几乎都是 27 秒,而我原本希望能在 2 秒内完成)。

我用了一些 urllib2 的方法来发起 HEAD 请求,具体可以在这里找到,还用了 pycurl(把 headersnobody 设置为 True)。结果这两种方法花的时间都是一样的。

我是不是在某个概念上搞错了?用 Python 能不能做一个“快速”的 HEAD 请求呢?

3 个回答

1

响应时间主要取决于服务器,而不是你的请求。HEAD请求返回的数据比较少(只有头部信息),理论上应该更快,但实际上很多静态资源都是缓存的,所以几乎没有可测量的差别(只是多了些额外数据包传输的时间)。

1

很可能,那个请求花费的大部分时间其实是服务器生成超过5MB的响应内容的过程,而不是把这些内容传输给你的时间。

在很多情况下,网页应用在回应HEAD请求时,仍然会执行完整的脚本,只是不会把完整的内容发送回请求者。

如果你能访问处理这个请求的代码,你可以在里面添加一个条件,让它根据请求的方法来不同处理,这样可能会大大加快速度。

7

服务器花费了大部分时间,而不是你的请求者或网络。如果这是一个动态资源,服务器可能在生成内容之前并不知道所有的头信息,特别是内容长度(Content-Length)。所以无论你是使用HEAD请求还是GET请求,服务器都得先把整个内容生成出来。

撰写回答