2016-04-22 70 views
0

我正想通過這個鏈接: https://access.redhat.com/documentation/en-US/Red_Hat_JBoss_Fuse/6.0/html/Web_Services_and_Routing_with_Camel_CXF/files/Proxying-Headers.html爲什麼Apache的駱駝過濾掉HTTP頭

它指出,使用HTTP或基於HTTP的組件建橋的應用程序時,經常需要刪除或過濾掉某些標題或您的路線中的標題類,以確保您的應用程序按照預期行事。另外在org.apache.camel.component.netty4.http.NettyHttpHeaderFilterStrategy可以看出,被過濾掉大量的頭如下:

protected void initialize() { 
    getOutFilter().add("content-length"); 
    getOutFilter().add("content-type"); 
    getOutFilter().add("host"); 
    // Add the filter for the Generic Message header 
    // http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.5 
    getOutFilter().add("cache-control"); 
    getOutFilter().add("connection"); 
    getOutFilter().add("date"); 
    getOutFilter().add("pragma"); 
    getOutFilter().add("trailer"); 
    getOutFilter().add("transfer-encoding"); 
    getOutFilter().add("upgrade"); 
    getOutFilter().add("via"); 
    getOutFilter().add("warning"); 

} 

我知道我們可以實現我們自己的過濾器覆蓋此行爲戰略。但是阻止標題的原因是什麼?例如,如果我不阻止緩存控制或編譯指示標題,會導致什麼副作用?

回答

0

據我記得你引用的標題過濾器是白名單,而不是黑名單。即它將通過所有列出的(http相關的)標題,但放棄所有其他標題,這些標題可能在通過您的路線旅行時添加到您的交換中。通常情況下,您希望刪除這些額外的頭文件,這樣它們就不會泄漏您系統內部的bean。

+0

在上面提供的鏈接中,它還指出當HTTP生產者端點接收到交換並將其轉換爲目標消息格式時,它將如下處理In消息標頭:**所有其他標頭將轉換爲HTTP標頭目標消息,用下面的標頭,其被阻塞(基於不區分大小寫匹配)除外:** _content長度 內容類型 緩存控制 連接 日期 編譯 拖車 轉印-encoding upgrade via warning_ – user3244615

+0

t他不是真的,HttpHeaderFilterStrategy會過濾掉所有的一般的http頭文件。我面臨同樣的問題,因爲它會過濾緩存控制頭。 – bLaXjack