1. 程式人生 > >Web Service請求資料報文有木有限制

Web Service請求資料報文有木有限制

大清早,被產品汪問道Web Service介面的資料報文大小是多少?正在吃早餐的我被問了個措手不及,腦袋還算靈光的我反應過來Web Service是POST請求,應該是沒有大小限制的,但是,懷抱嚴謹的態度,還是去谷歌求證了一下!

  • 首先,明確一下Web Service資料傳輸量最大是多少,理論上Web Service用的post方法是沒有大小限制的,但是http伺服器(比如tomcat、jetty)可能對接受資料大小有限制。實際上,傳輸大量的資料(比如幾個G),很多現成能夠呼叫的方法和函式庫都會有限制。

如果你必須在網路上傳輸大量資料,條件允許的情況下,搭建SFTP伺服器,先把產生的資料寫入到一個本地檔案,然後通過程式裡的ftp命令把這個檔案傳到ftp伺服器,與介面呼叫方約定好規則,去讀SFTP伺服器上傳過來的檔案。這樣也是系統自動完成的,且ftp傳輸不會有大小限制。

  • 如果你不想搭建ftp伺服器,基於如下幾方面考慮:

主要效能還是取決於自身程度程式碼的效能

webservice ,用來傳資料,1G的網絡卡基本可以達到80%的流量,再高容易丟包。

和伺服器、網路都有關係。
網路是專線光纖,伺服器不夠可以加。如果真的需要實時互動,同時幾百併發,傳送資料可能不多(每次也就是一條或幾條相關資料),但是不能丟包。
如果說考慮對方伺服器掛掉導致資料丟失,可以考慮補償機制啊,比如:設定標誌位,若傳送失敗則重發。

  • 那就考慮從網路、伺服器入手

搭建專線網路,比如專線光纖,單詞傳送2G資料沒問題

  • 我們最常見的Nginx加Jetty的作為接入層和web容器,這兩個開源軟體都會限制body的大小,我們可以使用以下方式來修改這個限制來支撐我們自己的業務。

Jetty

Jetty的預設值為200k,我們可以在配置內修改這個預設設定,修改JETTY_HOME/etc/jetty.xml,對maxFormContentSize重新賦值,-1表示不限制,正數值表示所允許的最大bytes:

<Call class="java.lang.System" name="setProperty">    
         <Arg>org.mortbay.jetty.Request.maxFormContentSize</Arg>    
         <Arg>-1</Arg>    
</Call> 

Nginx

修改nginx目錄下nginx.conf,在http模組中設定client_max_body_size便可,0為不設定,可以使用M作為單位:

http {   
    #......   
    client_max_body_size 300M;   
    #......   
}

Tomcat

預設限制為2097152bytes(2MB)。
修改預設限制值的方法如下:

修改tomcat的配置檔案$TOMCAT_HOME$/conf/server.xml,找<Connector>節點,在該節點中新增”maxPostSize”屬性,將該屬性值設定成你想要的最大值(單位:byte,0表示不限制)。