2012-08-15 31 views
1

我運行一個,就是以組合形式使用,我有沒有影響現有的HTTP客戶端上CloudFoundry一個應用程序的NodeJS。在CloudFoundry上,HTTP請求頭似乎被過濾。有沒有辦法接收它們?

該HTTP客戶端發送請求頭這我的應用程序是依賴,而是通過標題的列表迭代已經缺少他們。相反,在開發機器上運行NodeJS應用程序按預期列出了這些標頭。

有問題的頭是應用特定的,而不是由RFC文檔定義也沒有開始以「X-」。確切地說,有問題的客戶端是遊戲「EVE Online」的遊戲內瀏覽器。客戶端的標題用前綴「eve_」命名,所以「eve_trusted」將是一個真實的例子。

下面我們標識了下劃線字符('_')是一個可能的問題 - 沒有下劃線的其他未知頭部會傳遞。

有沒有辦法找到請求的原始頭文件,這是Cloud Foundry的一項功能請求,還是我一旦放到雲服務負載平衡器後面,我就會丟失在這裏?

+0

我有一個類似的問題,我很想回答,如果你民間想出任何解決這個問題:http://stackoverflow.com/questions/18189626/cloudfoundry-nginx-grails-and-the-x-轉發頭失蹤 – Spider 2013-08-12 14:30:22

回答

1

只是爲了幫助理解您的問題我部署了一個簡單的節點應用程序,它可以輸出由客戶端設置的標頭,以便我可以使用curl發送任意值,代碼如下:

var http = require('http'); 
var util = require('util'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end(util.inspect(req.headers)); 
}).listen(3000); 

我把它部署到http://node-headers.cloudfoundry.com,請隨時此測試自己,我會離開它生活了一段時間。然後我用curl使用以下語法發送請求;

curl --header "CustomHeader: Hello" node-headers.cloudfoundry.com 

這產生了以下輸出;

{ host: 'node-headers.cloudfoundry.com', 
'x-forwarded-for': '80.175.199.28, 172.30.8.253', 
connection: 'close', 
'user-agent': 'curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5', 
accept: '*/*', 
customheader: 'Hello', 
'x-cluster-client-ip': '80.175.199.28' } 

您可以看到我用curl發送的自定義標題。我也用不止一個實例測試過這個結果。

如果有什麼我在這裏失蹤然後請讓我知道,我會很樂意與你一起解決問題。

+0

感謝您的回覆。我再次嘗試了遊戲內瀏覽器,但仍然沒有顯示標題。然後,我將你的應用程序作爲參考運行,並且標題在那裏。之後,我用CURL試了一下,發現問題:標題中有一個下劃線字符('_')。例如,只要您傳遞「custom_header」,就會過濾這一個。這裏發生了什麼魔術? – dertseha 2012-08-15 16:51:26

+0

......終於添加一個例子,以及:客戶端的頭被命名爲前綴「eve_」,所以「eve_trusted」將是一個真實的例子(雖然我不知道確切的大寫/小寫序列,應這也是重要的)。 – dertseha 2012-08-15 17:15:33

+0

嗨,我找到了原因。在Cloud Foundry中,所有應用程序都通過nginx進行代理。它的默認行爲是不允許標頭名稱中的下劃線。我可以驗證重新配置nginx以允許這樣做,因爲我已經改變了我自己的私有VCAP實例,並且它可以工作。我會和工程團隊交談,看看我們是否可以改變生產環境來實現這一目標。 – 2012-08-16 09:26:03

相關問題