HEAD请求与GET请求

时间:2011-10-19 18:39:03

标签: python http urllib2 head pycurl

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

然而,在Python中发出HEAD请求时(对于5+ MB动态生成的资源)我意识到它需要花费相同的时间来发出GET请求(差不多27秒而不是'不到2秒'我希望能够。)

使用一些urllib2解决方案在此处发现HEAD请求,甚至使用pycurl(将headersnobody设置为True)。他们俩都花了相同的时间。

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

3 个答案:

答案 0 :(得分:7)

服务器占用大部分时间,而不是您的请求者或网络。如果它是一个动态资源,服务器可能不知道所有头信息 - 特别是Content-Length - 直到它构建它。因此无论你是做HEAD还是GET,它都必须构建整个事物。

答案 1 :(得分:1)

响应时间由服务器控制,而不是由您的请求决定。 HEAD请求返回的数据较少(只是标题),所以在概念上它应该更快,但实际上,许多静态资源都被缓存,因此几乎没有可测量的差异(只是附加数据包下线的时间)。 / p>

答案 2 :(得分:1)

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

在许多情况下,Web应用程序在响应HEAD请求时仍会执行完整脚本 - 它不会将完整的主体发送回请求者。

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