如何让setHeader覆盖现有标头?

Sea*_*lsh 8 coldfusion coldfusion-9 chromelogger

我正在使用ChromeLogger扩展程序(无耻插件)的CF接口,它使用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>
Run Code Online (Sandbox Code Playgroud)

在CF9中,我看到三个名为"test-header"的标题,每个标题都有自己的值.在CF10中,我看到一个名为"test-header"的标题,其值为"value 3".根据这个方法的Java文档,后者是正确的(强调我的):

设置具有给定名称和值的响应标头.如果已设置标头,则新值将覆盖前一个标头.containsHeader方法可用于在设置其值之前测试标头的存在.

使用cfheader标签具有相同的结果,大概是因为它只是包装了setHeader()方法.

我知道我可以在请求过程中构建标题,然后setHeader()在最后通过一次调用onRequestEnd(),但我希望这个组件尽可能自包含 - 最终用户越少修改他们的代码来实现它,越多越好.

CF9中有没有其他方法可以覆盖现有的标题?

Mig*_*l-F 4

看起来这可能是 ColdFusion 9 中的一个错误。 https://bugbase.adobe.com/index.cfm?event=bug&id=3041696 这个错误是 Adam Cameron 于 2010 年 6 月在 9.0 版本中输入的(据我所知)告诉)。它的状态为“已推迟”,原因为“NotEnoughTime”。