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