如何让setHeader覆盖现有标头?

时间:2013-04-16 18:16:34

标签: coldfusion coldfusion-9 chromelogger

我正在使用ChromeLogger扩展程序(shameless plug)的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>

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

  

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

使用cfheader标记会产生相同的结果,大概是因为它只包含setHeader()方法。

我知道我可以在请求过程中构建标头,然后通过setHeader()在最后一次调用onRequestEnd(),但我希望此组件为尽可能自包含 - 最终用户修改代码以实现它的次数越少越好。

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

1 个答案:

答案 0 :(得分:4)

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