Coldfusion 头请求性能

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,这是正确的吗 如果我对第一点的

我们目前正在测试web服务器的性能,并且在生产服务器和测试服务器之间得到了非常不同的结果

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

  • 下载站点上提供的RSS提要XML
  • 对XML提要中存在的所有链接发出HEAD请求,以检查url是否正确
令人惊讶的是,当prod服务器上的相同测量读数为900毫秒时,测试服务器上的平均响应时间约为15毫秒。由于两台服务器(应该)配置相同,我对这些结果感到非常困惑

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


    令人惊讶的是,同一文件上的同一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注意到我说的是“应该”而不是“必须”。也许你更希望我像规范那样写“应该”?你可以随意用部分数据修改回复,但你应该评估更多的实际情况