我怎么能让setHeader覆盖一个现有的头



我正在研究一个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"。

相关内容

  • 没有找到相关文章

最新更新