我们目前正在测试我们的Web服务器上的性能,并且在生产服务器和测试服务器之间得到了截然不同的结果。
我们正在进行的测试如下:
令人惊讶的是,当prod服务器上的相同测量读数为900毫秒时,测试服务器上的平均响应时间约为15毫秒。由于两个服务器(应该是)配置相同,我对这些结果感到非常困惑。
根据我们收到的建议,我只是尝试在测试cfm页面中添加一个日志条目,以查看CFLog是否被执行。
令人惊讶的是,同一个文件上的相同HEAD请求会在prod中生成一个日志条目。而不是在测试中。显然,配置应该在test和prod之间有所不同,但我不知道在哪个级别。
答案 0 :(得分:1)
你的第一个假设是不正确的。对HEAD
请求的响应必须编码,不会自动处理。 HEAD
请求应使用与GET
请求相同的标头信息进行响应,这通常意味着执行与GET
请求相同的代码,然后在响应中省略消息正文。
HEAD方法与GET相同,只是服务器不能 在响应中返回一个消息体。元信息包含 在HTTP头中响应HEAD请求应该是相同的 响应GET请求发送的信息。这种方法可以 用于获取有关该隐含的实体的元信息 请求而不转移实体主体本身。这个方法是 经常用于测试超文本链接的有效性,可访问性, 和最近的修改。
对HEAD请求的响应可能是可缓存的 响应中包含的信息可用于更新a 以前从该资源缓存的实体。如果是新字段值 表示缓存的实体与当前实体不同(如 将通过内容长度,内容-MD5,ETag或更改来表示 Last-Modified),然后缓存必须将缓存条目视为陈旧。
我认为很少看到动态网站,CMS或框架实际上实现了大多数事情,如HEAD
响应,有效ETags等 - 所以通常你会得到相同的回复GET
和HEAD
,包括应该从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。