☆Hessian HTTP POST訪問時采缚,Nginx返回411問題

1 問題描述

用 Hessian 實現(xiàn) web service 過程中嫂冻,需要創(chuàng)建對象時珠叔,是使用 HTTP POST 方法來傳遞數(shù)據(jù)的氓扛。但是在有反向代理 (nginx) 的情況下,會拋出異常

(com.caucho.hessian.client.HessianConnectionException: 411:java.io.IOException: Server returned HTTP response code: 411 for URL:http://xxxx/xxx/xxxService) 淆珊。

首先來看下 HTTP 411 錯誤的解釋: Length Required 服務(wù)器不能處理請求,除非客戶發(fā)送一個 Content-Length 頭奏司。( HTTP 1.1 新)這是因為 Hessian 與服務(wù)端通信默認是采取分塊的方式 (chunked encoding) 發(fā)送數(shù)據(jù)瓷叫,而反向代理要獲得 Content-Length 這個頭,才能處理請求楞陷,但是 Hessian 的請求中并沒有加入這個參數(shù)怔鳖。

2 排查過程

  1. 不通過Nginx反向代理時,Hessian接口訪問正常固蛾;【正辰嶂矗】
  2. 查看Nginx的日志access.log,是有Nginx返回411狀態(tài)艾凯;【不正诚揍#】

3 解決問題

com.caucho.hessian.client.HessianProxyFactory 類中,有一個 boolean _chunckedPost 的域成員趾诗,其默認值為 true 蜡感。這個值就是規(guī)定 Hessian 是否以分塊發(fā)送的方式與服務(wù)端交換數(shù)據(jù)的參數(shù),因此在創(chuàng)建 com.caucho.hessian.client.HessianProxyFactory 的對象后(假設(shè)為 factory )恃泪,只要調(diào)用其上的 setChunckedPost() 方法郑兴,把這個屬性設(shè)置為 false 即可。即 factory.setChunkedPost(false);

4 問題總結(jié)

分塊編碼 (chunked encoding) 傳輸方式 是 HTTP 1.1 協(xié)議中定義的 Web 用戶向服務(wù)器提交數(shù)據(jù)的一種方法贝乎,當服務(wù)器收到 chunked 編碼方式的數(shù)據(jù)時會分配一個緩沖區(qū)存放之情连,如果提交的數(shù)據(jù)大小未知,客戶端會以一個協(xié)商好的分塊大小向服務(wù)器提交數(shù)據(jù)览效。

如果不使用 Chunked encoding 傳輸方式蒙具,需要將要發(fā)送的數(shù)據(jù)緩存下來,計算出 content-length 朽肥,從而滿足反向代理( Nginx )需要 content-length 的要求禁筏。

該問題還可以通過修改 nginx 配置,使得 nginx 可以處理分塊編碼 (chunked encoding) 傳輸方式衡招。在使用Nginx 1.3.9以下版本篱昔,都存在當用戶POST一個帶有文件的請求的時候,出現(xiàn)HTTP 411錯誤始腾。 這個是Nginx的問題州刽,需要打一個補丁。

#下載chunkin模塊
git clone https://github.com/agentzh/chunkin-nginx-module.git
#編譯nginx,使用chunkin模塊
wget http://nginx.org/download/nginx-1.2.7.tar.gz
tar xvzf nginx-1.2.7.tar.gz
cd nginx-1.2.7
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --with-google_perftools_module --with-http_realip_module --add-module=../chunkin-nginx-module 
make -j8
make install

添加 HttpChunkinModule 解決浪箭。由于這個模塊已經(jīng)內(nèi)置到了 nginx 1.3.9 以后的 nginx 核心了穗椅,所以原來的 nginx 1.4.x 沒有這個問題。模塊介紹和具體安裝過程見:http://wiki.nginx.org/HttpChunkinModule奶栖,把這個模塊編譯進去后給 server 節(jié)點添加一個配置就可以了:

server {
    chunkin on;
    error_page 411 = @my_411_error;
    location @my_411_error {
        chunkin_resume;
    }
}

之后重啟nginx就可以了匹表。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末门坷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子袍镀,更是在濱河造成了極大的恐慌默蚌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苇羡,死亡現(xiàn)場離奇詭異绸吸,居然都是意外死亡,警方通過查閱死者的電腦和手機设江,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門锦茁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叉存,你說我怎么就攤上這事蜻势。” “怎么了鹉胖?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵握玛,是天一觀的道長。 經(jīng)常有香客問我甫菠,道長挠铲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任寂诱,我火速辦了婚禮拂苹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痰洒。我一直安慰自己瓢棒,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布丘喻。 她就那樣靜靜地躺著脯宿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泉粉。 梳的紋絲不亂的頭發(fā)上连霉,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音嗡靡,去河邊找鬼跺撼。 笑死,一個胖子當著我的面吹牛讨彼,可吹牛的內(nèi)容都是我干的歉井。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哈误,長吁一口氣:“原來是場噩夢啊……” “哼哩至!你這毒婦竟也來了躏嚎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤憨募,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后袁辈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菜谣,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年晚缩,在試婚紗的時候發(fā)現(xiàn)自己被綠了尾膊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荞彼,死狀恐怖冈敛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸣皂,我是刑警寧澤抓谴,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站寞缝,受9級特大地震影響癌压,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荆陆,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一滩届、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧被啼,春花似錦帜消、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至命浴,卻和暖如春粘衬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咳促。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工稚新, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跪腹。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓褂删,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冲茸。 傳聞我的和親對象是個殘疾皇子屯阀,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容