Get請(qǐng)求有大小限制?別再執(zhí)迷不悟了!

從進(jìn)入IT這個(gè)行業(yè),我接觸到的就是get有長(zhǎng)度限制,1024B。時(shí)至今日,好尷尬!

Http的get請(qǐng)求方法提交的數(shù)據(jù)大小長(zhǎng)度并沒有限制,Http協(xié)議規(guī)范沒有對(duì)URL長(zhǎng)度進(jìn)行限制。目前說的get長(zhǎng)度有限制,是特定的瀏覽器及服務(wù)器對(duì)它的限制。

各種瀏覽器和服務(wù)器的最大處理能力如下:

IE:對(duì)URL的最大限制為2083個(gè)字符,若超出這個(gè)數(shù)字,提交按鈕沒有任何反應(yīng)。

Firefox:對(duì)Firefox瀏覽器URL的長(zhǎng)度限制為:65536個(gè)字符。

Safari:URL最大長(zhǎng)度限制為80000個(gè)字符。

Opera:URL最大長(zhǎng)度限制為190000個(gè)字符。

Chrome:URL最大長(zhǎng)度限制為8182個(gè)字符。

Apache(Server):能接受的最大url長(zhǎng)度為8192個(gè)字符(這個(gè)準(zhǔn)確度待定???)?Microsoft Internet Information Server(IIS):n能接受最大url的長(zhǎng)度為16384個(gè)字符。

理論上講,post是沒有大小限制的。Http協(xié)議規(guī)范也沒有進(jìn)行大小限制,起限制作用的是服務(wù)器處理程序的處理能力。

Tomcat下默認(rèn)post長(zhǎng)度為2M,可通過修改conf/server.xml中的“maxPostSize=0”來取消對(duì)post大小的限制。

注意:(若長(zhǎng)度超限,則服務(wù)端返回414標(biāo)識(shí))

首先即使有長(zhǎng)度限制,也是限制的是整個(gè)URI長(zhǎng)度,而不僅僅是你的參數(shù)值數(shù)據(jù)長(zhǎng)度。

HTTP協(xié)議從未規(guī)定GET/POST的請(qǐng)求長(zhǎng)度限制是多少

所謂的請(qǐng)求長(zhǎng)度限制是由瀏覽器和web服務(wù)器決定和設(shè)置的,瀏覽器和web服務(wù)器的設(shè)定均不一樣,這依賴于各個(gè)瀏覽器廠家的規(guī)定或者可以根據(jù)web服務(wù)器的處理能力來設(shè)定。

GET VS POST擴(kuò)展:

多數(shù)瀏覽器對(duì)于POST采用兩階段發(fā)送數(shù)據(jù)的,先發(fā)送請(qǐng)求頭,再發(fā)送請(qǐng)求體,即使參數(shù)再少再短,也會(huì)被分成兩個(gè)步驟來發(fā)送(相對(duì)于GET),也就是第一步發(fā)送header數(shù)據(jù),第二部再發(fā)送body部分。Http是應(yīng)用層的協(xié)議,而再傳輸層有些情況TCP會(huì)出現(xiàn)兩次連結(jié)的過程,http協(xié)議本身不保存狀態(tài)信息,一次請(qǐng)求一次響應(yīng)。對(duì)于TCP而言,通信次數(shù)越多反而可靠性越低,能在一次連結(jié)中傳輸完需要的信息是最可靠的,所以盡量使用GET請(qǐng)求來減少網(wǎng)絡(luò)耗時(shí)。如果通信時(shí)間增加,這段時(shí)間客戶端于服務(wù)器端一直保持連接狀態(tài),在服務(wù)器側(cè)負(fù)載可能會(huì)增加,可靠性會(huì)下降。

GET請(qǐng)求能夠被cache,GET請(qǐng)求能夠被保存在瀏覽器的瀏覽歷史里面(密碼等重要數(shù)據(jù)GET提交,別人查看歷史記錄,就可以直接看到這些私密數(shù)據(jù))POST不進(jìn)行緩存。

GET參數(shù)是帶在URL后面,傳統(tǒng)IE中URL的最大可用長(zhǎng)度為2048字符,其他瀏覽器對(duì)URL長(zhǎng)度限制實(shí)現(xiàn)上有所不同。POST請(qǐng)求無長(zhǎng)度限制(目前理論上是這樣)。 4. GET提交的數(shù)據(jù)大小,不同瀏覽器的限制不同,一般在2k-8k之間,POST提交數(shù)據(jù)比較大,大小靠服務(wù)器的設(shè)定值限制,而且某些數(shù)據(jù)只能用POST方法【攜帶】,比如file。

全部用POST不是十分合理,最好先把請(qǐng)求按功能和場(chǎng)景分下類,對(duì)數(shù)據(jù)請(qǐng)求頻繁,數(shù)據(jù)不敏感且數(shù)據(jù)量在普通瀏覽器最小限定的2k范圍內(nèi),這種情況使用GET。其他地方使用POST。

GET的本質(zhì)是【得】,而POST的本質(zhì)是【給】。而且,GET是【冪等】的,在這一點(diǎn)上,GET被認(rèn)為是【安全的】。實(shí)際上server端也可以用作資源更新,但是這種用法違反了約定,容易造成CSRF(跨站請(qǐng)求偽造)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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