Python HEAD请求与GET请求

Python HEAD请求与GET请求,python,http,urllib2,head,pycurl,Python,Http,Urllib2,Head,Pycurl,我一直认为,执行HEAD请求而不是GET请求更快(无论资源大小),因此在某些解决方案中具有it优势 然而,在Python中发出HEAD请求(对一个5+MB的动态生成资源)时,我意识到它与发出GET请求花费的时间相同(几乎是27秒,而不是我希望的“不到2秒”) 使用一些urllib2解决方案来发出一个HEAD请求,甚至使用了pycurl(将headers和nobody设置为True)。他们两人都花了同样的时间 我在概念上遗漏了什么吗?是否可以使用Python执行“快速”的头请求?服务器占用了大部分

我一直认为,执行
HEAD
请求而不是
GET
请求更快(无论资源大小),因此在某些解决方案中具有it优势

然而,在Python中发出
HEAD
请求(对一个5+MB的动态生成资源)时,我意识到它与发出
GET
请求花费的时间相同(几乎是27秒,而不是我希望的“不到2秒”)

使用一些urllib2解决方案来发出一个
HEAD
请求,甚至使用了
pycurl
(将
headers
nobody
设置为
True
)。他们两人都花了同样的时间


我在概念上遗漏了什么吗?是否可以使用Python执行“快速”的
头请求?

服务器占用了大部分时间,而不是您的请求者或网络。如果它是一个动态资源,那么在构建它之前,服务器很可能不知道所有的头信息——特别是内容长度。因此,无论您是执行HEAD还是GET,它都必须构建整个过程。

响应时间由服务器决定,而不是由您的请求决定。HEAD请求返回的数据较少(仅报头),因此从概念上讲,它应该更快,但实际上,许多静态资源都被缓存,因此几乎没有可测量的差异(只是额外数据包到达线路的时间)。

可能,大部分请求时间实际上是在服务器上生成5+MB响应的任何进程,而不是将其传输给您的时间

在许多情况下,web应用程序在响应HEAD请求时仍然会执行完整的脚本——它只是不会将完整的脚本发送回请求者


如果您有权访问处理该请求的代码,您可以在其中添加一个条件,使其根据方法的不同处理该请求,从而显著加快处理速度。

除了下面的说明之外,有些服务器对HEAD请求的响应速度更快。