我们有以下代码,以后只需替换为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);

最佳答案

正常吗


当然,这似乎有些奇怪。


  这有什么问题吗?


很难说。似乎这种奇怪的行为很可能发生在服务器端。我将检查以下内容:


编写一个微型基准测试,该基准反复在同一页面上进行GET和HEAD操作,以确保性能差异是真实的,而不是测量方式的假象。
使用数据包记录器查看实际发送和接收的内容。
检查服务器日志。
使用微基准分析负载下的服务器代码。




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

关于java - 为什么HttpHead返回比HttpGet花费更长的时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13717473/

10-15 15:31