從進(jìn)入IT這個行業(yè)庵佣,我接觸到的就是get有長度限制,1024B汛兜。時(shí)至今日巴粪,好尷尬!
Http的get請求方法提交的數(shù)據(jù)大小長度并沒有限制粥谬,Http協(xié)議規(guī)范沒有對URL長度進(jìn)行限制肛根。目前說的get長度有限制,是特定的瀏覽器及服務(wù)器對它的限制漏策。
各種瀏覽器和服務(wù)器的最大處理能力如下:
IE:對URL的最大限制為2083個字符派哲,若超出這個數(shù)字,提交按鈕沒有任何反應(yīng)掺喻。
Firefox:對Firefox瀏覽器URL的長度限制為:65536個字符芭届。
Safari:URL最大長度限制為80000個字符储矩。
Opera:URL最大長度限制為190000個字符。
Chrome:URL最大長度限制為8182個字符褂乍。
Apache(Server):能接受的最大url長度為8192個字符(這個準(zhǔn)確度待定持隧??逃片?)?Microsoft Internet Information Server(IIS):n能接受最大url的長度為16384個字符屡拨。
理論上講,post是沒有大小限制的褥实。Http協(xié)議規(guī)范也沒有進(jìn)行大小限制呀狼,起限制作用的是服務(wù)器處理程序的處理能力。
Tomcat下默認(rèn)post長度為2M损离,可通過修改conf/server.xml中的“maxPostSize=0”來取消對post大小的限制赠潦。
注意:(若長度超限,則服務(wù)端返回414標(biāo)識)
首先即使有長度限制草冈,也是限制的是整個URI長度她奥,而不僅僅是你的參數(shù)值數(shù)據(jù)長度。
HTTP協(xié)議從未規(guī)定GET/POST的請求長度限制是多少
所謂的請求長度限制是由瀏覽器和web服務(wù)器決定和設(shè)置的怎棱,瀏覽器和web服務(wù)器的設(shè)定均不一樣哩俭,這依賴于各個瀏覽器廠家的規(guī)定或者可以根據(jù)web服務(wù)器的處理能力來設(shè)定。
GET VS POST擴(kuò)展:
多數(shù)瀏覽器對于POST采用兩階段發(fā)送數(shù)據(jù)的拳恋,先發(fā)送請求頭凡资,再發(fā)送請求體,即使參數(shù)再少再短谬运,也會被分成兩個步驟來發(fā)送(相對于GET),也就是第一步發(fā)送header數(shù)據(jù)隙赁,第二部再發(fā)送body部分。Http是應(yīng)用層的協(xié)議梆暖,而再傳輸層有些情況TCP會出現(xiàn)兩次連結(jié)的過程伞访,http協(xié)議本身不保存狀態(tài)信息,一次請求一次響應(yīng)轰驳。對于TCP而言厚掷,通信次數(shù)越多反而可靠性越低,能在一次連結(jié)中傳輸完需要的信息是最可靠的级解,所以盡量使用GET請求來減少網(wǎng)絡(luò)耗時(shí)冒黑。如果通信時(shí)間增加,這段時(shí)間客戶端于服務(wù)器端一直保持連接狀態(tài)勤哗,在服務(wù)器側(cè)負(fù)載可能會增加抡爹,可靠性會下降。
GET請求能夠被cache芒划,GET請求能夠被保存在瀏覽器的瀏覽歷史里面(密碼等重要數(shù)據(jù)GET提交冬竟,別人查看歷史記錄欧穴,就可以直接看到這些私密數(shù)據(jù))POST不進(jìn)行緩存。
GET參數(shù)是帶在URL后面诱咏,傳統(tǒng)IE中URL的最大可用長度為2048字符苔可,其他瀏覽器對URL長度限制實(shí)現(xiàn)上有所不同。POST請求無長度限制(目前理論上是這樣)袋狞。 4. GET提交的數(shù)據(jù)大小焚辅,不同瀏覽器的限制不同,一般在2k-8k之間苟鸯,POST提交數(shù)據(jù)比較大同蜻,大小靠服務(wù)器的設(shè)定值限制,而且某些數(shù)據(jù)只能用POST方法【攜帶】早处,比如file湾蔓。
全部用POST不是十分合理,最好先把請求按功能和場景分下類砌梆,對數(shù)據(jù)請求頻繁默责,數(shù)據(jù)不敏感且數(shù)據(jù)量在普通瀏覽器最小限定的2k范圍內(nèi),這種情況使用GET咸包。其他地方使用POST桃序。
GET的本質(zhì)是【得】,而POST的本質(zhì)是【給】烂瘫。而且媒熊,GET是【冪等】的,在這一點(diǎn)上坟比,GET被認(rèn)為是【安全的】芦鳍。實(shí)際上server端也可以用作資源更新,但是這種用法違反了約定葛账,容易造成CSRF(跨站請求偽造)柠衅。