1

我们有以下代码,稍后将其替换为 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);
4

1 回答 1

2

正常吗?

这当然看起来有点奇怪。

这里有什么问题?

很难说。看起来奇怪的行为很可能发生在服务器端。我会检查以下内容:

  • 编写一个重复 GET 和 HEAD 相同页面的微基准,以确保性能差异是真实的,而不是您测量它的方式的人工制品。
  • 使用数据包记录器查看实际发送和接收的内容。
  • 检查服务器日志。
  • 使用您的微基准分析负载下的服务器代码。

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

于 2012-12-05T06:50:10.420 回答