從進(jìn)入IT這個(gè)行業(yè),我接觸到的就是get有長(zhǎng)度限制仿吞,1024B滑频。時(shí)至今日,好尷尬唤冈!
Http的get請(qǐng)求方法提交的數(shù)據(jù)大小長(zhǎng)度并沒(méi)有限制峡迷,Http協(xié)議規(guī)范沒(méi)有對(duì)URL長(zhǎng)度進(jìn)行限制。目前說(shuō)的get長(zhǎng)度有限制你虹,是特定的瀏覽器及服務(wù)器對(duì)它的限制绘搞。
各種瀏覽器和服務(wù)器的最大處理能力如下:
IE:對(duì)URL的最大限制為2083個(gè)字符,若超出這個(gè)數(shù)字傅物,提交按鈕沒(méi)有任何反應(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是沒(méi)有大小限制的。Http協(xié)議規(guī)范也沒(méi)有進(jìn)行大小限制齿坷,起限制作用的是服務(wù)器處理程序的處理能力桂肌。
Tomcat下默認(rèn)post長(zhǎng)度為2M数焊,可通過(guò)修改conf/server.xml中的“maxPostSize=0”來(lái)取消對(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è)定均不一樣,這依賴(lài)于各個(gè)瀏覽器廠家的規(guī)定或者可以根據(jù)web服務(wù)器的處理能力來(lái)設(shè)定螃宙。
GET VS POST擴(kuò)展:
- 多數(shù)瀏覽器對(duì)于POST采用兩階段發(fā)送數(shù)據(jù)的蛮瞄,先發(fā)送請(qǐng)求頭,再發(fā)送請(qǐng)求體谆扎,即使參數(shù)再少再短挂捅,也會(huì)被分成兩個(gè)步驟來(lái)發(fā)送(相對(duì)于GET),也就是第一步發(fā)送header數(shù)據(jù),第二部再發(fā)送body部分堂湖。Http是應(yīng)用層的協(xié)議闲先,而再傳輸層有些情況TCP會(huì)出現(xiàn)兩次連結(jié)的過(guò)程,http協(xié)議本身不保存狀態(tài)信息无蜂,一次請(qǐng)求一次響應(yīng)伺糠。對(duì)于TCP而言,通信次數(shù)越多反而可靠性越低斥季,能在一次連結(jié)中傳輸完需要的信息是最可靠的训桶,所以盡量使用GET請(qǐng)求來(lái)減少網(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)求無(wú)長(zhǎng)度限制(目前理論上是這樣)算色。 4. GET提交的數(shù)據(jù)大小抬伺,不同瀏覽器的限制不同,一般在2k-8k之間灾梦,POST提交數(shù)據(jù)比較大峡钓,大小靠服務(wù)器的設(shè)定值限制妓笙,而且某些數(shù)據(jù)只能用POST方法【攜帶】,比如file能岩。
- 全部用POST不是十分合理寞宫,最好先把請(qǐng)求按功能和場(chǎng)景分下類(lèi),對(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)求偽造)银锻。