2012-10-09 59 views
5

HTTP 1.1規定: 「客戶端必須在所有HTTP/1.1請求消息的主機首部字段」Tomcat可以接受沒有Host頭的HTTP 1.1請求嗎?

然而,我正在工作的機器發出此確切POST(包含座標),這是我不有權變更:

POST /touch HTTP/1.1 
Content-type: application/x-www-form-urlencoded 
Content-Length: <n> 

x=<int x>&y=<int y> 

的Tomcat 7立即用400 Bad Request響應由於缺乏一個主機頭域,和POST永遠不會給我的servlet。有什麼辦法可以避免這個錯誤響應,並用servlet處理POST來支持這些舊的機器?

回答

4

正如你已經指出的那樣,HTTP 1.1 spec says(粗體礦):

客戶端必須在所有HTTP/1.1請求消息的主機頭字段。 [...]的HTTP/1.1代理必須確保它不會轉發任何請求消息包含標識由代理所請求的服務的合適的宿主報頭字段。所有基於因特網的HTTP/1.1服務器必須以400(錯誤請求)狀態碼,其缺少Host頭字段中的任何HTTP/1.1請求消息進行響應。

客戶端錯誤地使用HTTP 1.1協議,您不應該嘗試在服務器端解決此問題。你可以做的是安裝程序,將剛纔添加的Host頭一些自定義的HTTP代理。但這是一個骯髒的解決方法。或者將協議降級到1.0。

還要注意的是,即使你以某種方式設法使Tomcat的接受這樣的要求(這是針對規範),你還是會碰到一些問題,如果任何HTTP代理的兩端之間。

+0

這是在工作中的測試工具,所以中間代理是不是一個問題。我寧願有某種工作在tomcat的周圍,就像一個過濾器或閥門,而不是建立一個代理,但我不認爲這是剝奪閥前可以攔截該請求。 – user1684196