GET和POST的區(qū)別

GET和POST是HTTP(超文本傳輸協(xié)議)下的兩個請求,是基于TCP的可靠傳輸,那么兩者有什么區(qū)別呢?

列舉:在萬維網(wǎng)世界中,TCP就像汽車,我們用TCP來運輸數(shù)據(jù),它很可靠,從來不會發(fā)生丟件少件的現(xiàn)象。但是如果路上跑的全是看起來一模一樣的汽車,那這個世界看起來是一團混亂,送急件的汽車可能被前面滿載貨物的汽車攔堵在路上,整個交通系統(tǒng)一定會癱瘓。為了避免這種情況發(fā)生,交通規(guī)則HTTP誕生了。

HTTP給汽車運輸設定了好幾個服務類別,有GET, POST, PUT, DELETE等等,HTTP規(guī)定,當執(zhí)行GET請求的時候,要給汽車貼上GET的標簽(設置method為GET),而且要求把傳送的數(shù)據(jù)放在車頂上(url中)以方便記錄。如果是POST請求,就要在車上貼上POST的標簽,并把貨物放在車廂里(HTTP請求包的包體中)。當然,你也可以在GET的時候往車廂內(nèi)偷偷藏點貨物,但是這是很不光彩;也可以在POST的時候在車頂上也放一些數(shù)據(jù),讓人覺得傻乎乎的。HTTP只是個行為準則,而TCP才是GET和POST怎么實現(xiàn)的基本。

在這個傳輸過程中,還有另一個重要的角色:運輸公司。不同的瀏覽器(發(fā)起http請求)和服務器(接受http請求)就是不同的運輸公司。 雖然理論上,你可以在車頂上無限的堆貨物(url中無限加參數(shù))。但是運輸公司可不傻,裝貨和卸貨也是有很大成本的,他們會限制單次運輸量來控制風險,數(shù)據(jù)量太大對瀏覽器和服務器都是很大負擔。業(yè)界不成文的規(guī)定是,(大多數(shù))瀏覽器通常都會限制url長度在2K個字節(jié),而(大多數(shù))服務器最多處理64K大小的url。超過的部分,恕不處理。如果你用GET服務,在request body偷偷藏了數(shù)據(jù),不同服務器的處理方式也是不同的,有些服務器會幫你卸貨,讀出數(shù)據(jù),有些服務器直接忽略,所以,雖然GET可以帶request body,也不能保證一定能被接收到哦。

GET和POST還有一個重大區(qū)別,簡單的說:GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包。

長的說:對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務器響應200(返回數(shù)據(jù));而對于POST,瀏覽器先發(fā)送header,服務器響應100 continue,瀏覽器再發(fā)送data,服務器響應200 ok(返回數(shù)據(jù))。也就是說,GET只需要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,先去和服務器打個招呼“嗨,我等下要送一批貨來,你們打開門迎接我”,然后再回頭把貨送過去。

總結:

GET:從服務器上獲取數(shù)據(jù),相當于“查”,不會進行任何修改,但是其存在安全性問題,請求的數(shù)據(jù)會附加在URL后(大小有限制),請求參數(shù)會被完整保存在瀏覽器歷史記錄中,例如:在進行登錄操作,通過GET請求,用戶名和密碼會暴露在URL上。

POST:向服務器提交數(shù)據(jù),也就是“更新”,會更改服務器數(shù)據(jù),請求的數(shù)據(jù)在HTTP請求包的包體中。

本文舉例參考:http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容