4

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

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

使用了一些 urllib2 解决方案来发出HEAD在此处找到的请求,甚至使用pycurl(设置headersnobodyTrue)。他们两个都用了同样的时间。

我在概念上错过了什么吗?是否可以使用 Python 进行“快速”HEAD请求?

4

3 回答 3

7

服务器占用了大部分时间,而不是您的请求者或网络。如果它是动态资源,那么服务器很可能在构建它之前不知道所有的标头信息——特别是 Content-Length。所以无论你是在做 HEAD 还是 GET,它都必须构建整个事情。

于 2011-10-19T18:43:01.593 回答
1

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

于 2011-10-19T18:43:37.850 回答
1

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

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

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

于 2011-10-19T18:43:50.057 回答