2009-12-26 17 views
2

我們在使用django構建的生產環境中有一個基於Web的應用程序。它部署在nginx上,並通過apache通過WSGI處理django應用。 OS是Ubuntu。J2ME出現HTTP 411錯誤 - > nginx + apache + django

除了基於web的前端,我們最近開發了一個J2ME客戶端,用於通過手機上傳文件。 J2ME將傳輸編碼設置爲「分塊」並將內容長度設置爲零的文件傳輸;這是J2ME框架的標準方式,顯然它不能改變。

問題是nginx和apache都不允許零內容長度的分塊數據並且返回HTTP 411 error response。 Django似乎也有問題,但它可以很容易地修補。

網上很少有解決方案建議重新編譯nginx和apache,但我不想進入。有沒有更簡單的解決方案?

+0

我不明白爲什麼chunked和零長度會被設置爲J2ME,除非您的移動網絡運營商正在重寫HTTP標頭。 – 2010-01-05 16:08:09

+0

在J2ME客戶端上沒有禁用分塊的標準方法。 – sharjeel 2010-01-07 06:59:38

回答

1

根據我的經驗,如果使用OutputStream.flush(),J2ME會切換到分塊編碼。避免刷新,只需寫入OutputStream,然後立即關閉它。我能夠使用J2ME提交POST到Apache/Django設置就好了。由於使用flush(),我得到了411錯誤。一旦我刪除它,它工作得很好。我沒有手動設置Content-Length,它是自動設置的。

+1

只是開玩笑,如果身體太大,分塊編碼會回來。我最終使用mod_proxy將分塊編碼緩存到常規請求中。 http://stackoverflow.com/questions/284741/processing-chunked-encoded-http-post-requests-in-python-or-generic-cgi-under-apa – rryan 2010-07-08 10:10:10

+0

我試過mod_proxy但在某些請求(主要是當連接與deviceside =真正)它不起作用,我得到代理日誌中的錯誤類似於:給定內容長度不匹配的身體字節數讀取...文件結束找到:代理:通過請求主體未能從xxxxx:8080()...代理服務器的處理程序返回無效結果代碼70014 – sharjeel 2010-07-15 07:39:34