为什么HttpHead需要的时间比HttpGet要长

时间:2012-12-05 06:22:20

标签: java httpclient httpresponse

我们有以下代码,后来用HttpHead方法替换,因为我们只需要撤回网页的标题信息。在更改之后,我们注意到,平均而言,对于相同的网页集,HttpHead返回的时间比HttpGet要长。这是正常的吗?这可能有什么问题?

    HttpClient httpclient = new DefaultHttpClient();
    // the time it takes to open TCP connection.
    httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, this.timeout);

    // timeout when server does not send data.
    httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, this.timeout);

    // the get method
    HttpGet httpget = new HttpGet(url);

    HttpResponse response = httpclient.execute(httphead);

1 个答案:

答案 0 :(得分:2)

  

这是正常的吗?

这当然看起来有点奇怪。

  

这里可能有什么问题?

很难说。似乎奇怪的行为在服务器端很可能是。我会检查以下内容:

  • 编写一个微型基准测试,重复GETs和HEADs同一页面,以确保性能差异是真实的,而不是你测量它的方式的神器。
  • 使用数据包记录器查看实际发送和接收的内容。
  • 检查服务器日志。
  • 使用微基准测试加载服务器代码。

一种可能的解释是HEAD正在从(慢)数据库或文件系统加载数据。以下GET可以更快,因为数据已经被缓存。 (它可以是服务器代码中的显式缓存,后端数据库中的查询缓存或文件系统缓存。)您可以通过查看如果之前的GET更慢来测试一个头。