Coldfusion 头请求性能
我们目前正在测试web服务器的性能,并且在生产服务器和测试服务器之间得到了非常不同的结果 我们正在进行的测试如下:Coldfusion 头请求性能,coldfusion,iis-7.5,coldfusion-8,Coldfusion,Iis 7.5,Coldfusion 8,我们目前正在测试web服务器的性能,并且在生产服务器和测试服务器之间得到了非常不同的结果 我们正在进行的测试如下: 下载站点上提供的RSS提要XML 对XML提要中存在的所有链接发出HEAD请求,以检查url是否正确 令人惊讶的是,当prod服务器上的相同测量读数为900毫秒时,测试服务器上的平均响应时间约为15毫秒。由于两台服务器(应该)配置相同,我对这些结果感到非常困惑 我认为.CFM页面的HEAD请求实际上不涉及ColdFusion服务器,而只涉及IIS,这是正确的吗 如果我对第一点的
- 下载站点上提供的RSS提要XML
- 对XML提要中存在的所有链接发出HEAD请求,以检查url是否正确
令人惊讶的是,同一文件上的同一HEAD请求会在prod.中生成一个日志条目,而不是在test中。显然,test和prod的配置应该不同,但我不知道在哪个级别。我不知道这个问题的答案,但我拼凑了一些代码来测试它,并得到了一些结果。警告:我只使用内部TomcatWeb服务器,我使用的是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头。如果实际执行了headMe.cfm,那么我们将在headMe.log中获得一个日志条目。如果不是:没有日志条目
httpResponse
变量都是合法的,正如HEAD请求所预期的那样,并且。。。我拿到日志了
所以我的结论是,当收到HEAD请求时,不幸的是所有的CFML实际上都被执行了。我真的认为不应该。HTTP规范中没有任何东西建议它应该或不应该导致“动态”请求完全执行,但我认为如果不这样做就好了
无论如何,你的第一个假设是不正确的。对
头请求的响应必须进行编码,而不是自动处理。HEAD
请求应使用与GET
请求相同的头信息进行响应,这通常意味着执行与GET
请求相同的代码,然后在响应中省略消息体
发件人:
HEAD方法与GET相同,只是服务器不能
在响应中返回消息正文。包含的元信息
在HTTP中,响应头请求的头应该相同
响应GET请求而发送的信息。这种方法可以
用于获取由
请求而不传输实体体本身。这种方法是可行的
通常用于测试超文本链接的有效性、可访问性、,
以及最近的修改
对HEAD请求的响应可能是可缓存的,即
响应中包含的信息可用于更新
以前从该资源缓存的实体。如果新字段的值
指示缓存的实体与当前实体不同(如下所示)
将通过内容长度、内容MD5、ETag或
最后修改),则缓存必须将缓存项视为过时
我认为很少看到动态站点、CMS或框架真正实现了大多数事情,如HEAD
响应、有效等,因此通常你会从get
和HEAD
得到相同的响应,包括应该从头
请求中剥离的消息体
我假设您在时差中所经历的是服务器之间的内容差异。也就是说,测试服务器可能只有最少的内容,因此执行速度比完整内容的生产服务器快。我不太确定您的第一个假设。你试过用手拿书页吗?可以使用-X选项将HTTP谓词设置为HEAD。我想看看每台服务器都返回了什么,以便确定。我试着使用Fiddler。正如预期的那样,响应内容是空的,但是关于服务器实际上必须构建响应这一事实的问题仍然存在。这是我选择的另一个工具!您是否尝试过在“因为两台服务器(应该)配置相同”——两台服务器的规格是否也相同?数据库服务器的规格和配置是否相同(包括,正如nosilleg所指出的,具有相同的数据)?“包括执行所有代码”-它只需要执行设置适当标题所需的内容。@PeterBoughton这就是为什么句子的其余部分是“为了输出相同的元信息”。是的,如果有代码不影响页面输出,那么就不需要运行它。也就是说,我实际上想不出在执行HEAD
请求时可以剥离多少代码,因为如果它不影响输出签名,那么它可能首先就不应该运行。但开始是“完全相同”,这是错误的。整个句子可能需要重新编写以使其清晰。至于不同之处,对于在编辑时计算/存储元数据的CMS,head请求只需要读取相关元数据,而不需要读取/执行整个内容-类似于对修改后的,它只执行到知道是响应304还是继续完整请求的程度。@PeterBoughton注意到我说的是“应该”而不是“必须”。也许你更希望我像规范那样写“应该”?你可以随意用部分数据修改回复,但你应该评估更多的实际情况