2013-04-16 38 views
7

我正在致力於使用ChromeLogger擴展名(shameless plug)的CF接口,該接口使用HTTP標頭將數據從服務器端語言記錄到Chrome控制檯。我怎樣才能讓setHeader覆蓋現有的頭文件?

在請求過程中,可以多次調用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,我看到了三個頭名爲「測試頭」,每個都有自己的價值。在CF10中,我看到一個名爲「test-header」的頭文件,其值爲「值3」。根據此方法的Java docs,後者是正確的(重點是我的):

設置具有給定名稱和值的響應頭。 如果標題已被設置,則新值將覆蓋前一個。 containsHeader方法可用於在設置其值之前測試頭的存在。

使用cfheader標記具有相同的結果,大概是因爲它只是包裝了setHeader()方法。

我知道我可以在請求過程中建立標題,然後通過onRequestEnd()在末尾調用setHeader()一次,但我希望此組件儘可能獨立 - 更少的終端用戶必須修改他們的代碼來實現它,效果會更好。

CF9中是否有其他方式來覆蓋現有的頭文件?

回答

3

看起來它可能是ColdFusion 9中的一個bug。https://bugbase.adobe.com/index.cfm?event=bug&id=3041696這個bug是由Adam Cameron在2010年6月爲9.0版本輸入的(據我所知)。它被列爲「延遲」狀態和「NotEnoughTime」原因。

+1

謝謝,米格爾 - 這是令人失望的。我在Twitter上向亞當發送了一條消息,看看他是否找到了解決方法。如果他不這樣做,我會繼續接受,代替有真正的解決辦法。 –

+0

@SeanWalsh - 我認爲這意味着Adam從未找到解決方法? –

+0

不幸的是,沒有 - 在這裏看到他的兩條推文:https://twitter.com/daccf/status/324233254335033344 https://twitter.com/daccf/status/324233463597244416 –