HEAD请求性能

时间:2013-02-15 15:41:34

标签: coldfusion iis-7.5 coldfusion-8

我们目前正在测试我们的Web服务器上的性能,并且在生产服务器和测试服务器之间得到了截然不同的结果。

我们正在进行的测试如下:

  • 下载网站上提供的RSS Feed XML
  • 对XML Feed中存在的所有链接发出HEAD请求,以检查网址是否正确

令人惊讶的是,当prod服务器上的相同测量读数为900毫秒时,测试服务器上的平均响应时间约为15毫秒。由于两个服务器(应该是)配置相同,我对这些结果感到非常困惑。

  1. 我是否认为.CFM页面的HEAD请求实际上不涉及ColdFusion服务器而只涉及IIS?
  2. 如果我对第一点是正确的,那么我在哪里可以检查IIS级别的响应时间会有什么不同?
  3. 根据我们收到的建议,我只是尝试在测试cfm页面中添加一个日志条目,以查看CFLog是否被执行。

    令人惊讶的是,同一个文件上的相同HEAD请求会在prod中生成一个日志条目。而不是在测试中。显然,配置应该在test和prod之间有所不同,但我不知道在哪个级别。

2 个答案:

答案 0 :(得分:1)

你的第一个假设是不正确的。对HEAD请求的响应必须编码,不会自动处理。 HEAD请求应使用与GET请求相同的标头信息进行响应,这通常意味着执行与GET请求相同的代码,然后在响应中省略消息正文。

来自the HTTP spec, section 9.4

  

HEAD方法与GET相同,只是服务器不能   在响应中返回一个消息体。元信息包含   在HTTP头中响应HEAD请求应该是相同的   响应GET请求发送的信息。这种方法可以   用于获取有关该隐含的实体的元信息   请求而不转移实体主体本身。这个方法是   经常用于测试超文本链接的有效性,可访问性,   和最近的修改。

     

对HEAD请求的响应可能是可缓存的   响应中包含的信息可用于更新a   以前从该资源缓存的实体。如果是新字段值   表示缓存的实体与当前实体不同(如   将通过内容长度,内容-MD5,ETag或更改来表示   Last-Modified),然后缓存必须将缓存条目视为陈旧。

我认为很少看到动态网站,CMS或框架实际上实现了大多数事情,如HEAD响应,有效ETags等 - 所以通常你会得到相同的回复GETHEAD,包括应该从HEAD请求中删除的邮件正文。

我假设您在时差方面遇到的问题可归因于服务器之间的内容差异。也就是说,测试服务器可能只有最少的内容,因此执行速度比完整的内容制作服务器快。

答案 1 :(得分:0)

我不知道这个问题的答案,但我把一些代码拼凑起来测试它,并得到了一些结果。警告:我只使用内部Tomcat Web服务器,我正在使用CF10(我注意到你使用的是CF8)。我不认为他们的这些警告会使你在特定情况下的调查结果失效。

<!--- headMe.cfm --->
<cflog text="hit" file="headMe">


<!--- doHead.cfm --->
<cfhttp method="head" url="http://localhost/headMe.cfm" result="httpResponse" />
<cfdump var="#variables#">

所以我浏览到doHead.cfm,它执行headMe.cfm的HTTP HEAD。如果headMe.cfm实际执行了,那么我们将在headMe.log中获得一个日志条目。如果不是:没有日志条目。

httpResponse变量都是合法的,并且对于HEAD请求是可以预期的,并且......我得到了日志条目。

所以我的结论是,当收到HEAD请求时,遗憾的是所有CFML实际上都已执行。我真的不认为应该这样。 HTTP规范中没有任何内容表明它应该或不应该导致“动态”请求完全执行,但是如果它没有,我认为它会很好。

无论如何,HTH。