我正在研究一个CF接口到ChromeLogger扩展(无耻的插头),它使用HTTP头从服务器端语言记录数据到Chrome控制台。
在请求过程中,可以多次调用log()
方法。对于每个调用,我都以ChromeLogger正确显示数据所需的格式编写标题。在CF10中,这很好地工作-每个后续对setHeader()
的调用都会用相同的名称覆盖先前设置的标头。然而,在CF9中,我看到多个标题具有相同的名称。
这个示例代码演示了这个问题:
<cfscript>
pc = getPageContext().getResponse();
pc.setHeader( "test-header", "value 1" );
pc.setHeader( "test-header", "value 2" );
pc.setHeader( "test-header", "value 3" );
</cfscript>
在CF9中,我看到三个名为"test-header"的头,每个头都有自己的值。在CF10中,我看到一个名为"test-header"的头,其值为"value 3"。根据该方法的Java文档,后者是正确的(重点是我的):
用给定的名称和值设置响应头。如果头已经设置,新值将覆盖前一个。containsHeader方法可用于在设置头文件的值之前测试头文件是否存在。
使用cfheader
标签有相同的结果,大概是因为它只是包装了setHeader()
方法。
我知道我可以在请求的过程中建立头,然后在最后通过onRequestEnd()
调用setHeader()
一次,但我希望这个组件尽可能地自包含-最终用户修改代码来实现它越少,越好。
是否有其他方法在CF9覆盖现有的头?
看起来这可能是ColdFusion 9的一个bug。https://bugbase.adobe.com/index.cfm?event=bug&id=3041696这个bug是由Adam Cameron在2010年6月的9.0版本中输入的(据我所知)。它的状态为"Deferred",原因为"NotEnoughTime"。