1、
* GET在瀏覽器回退時是無害的井佑,而POST會再次提交請求属铁。
* GET產(chǎn)生的URL地址可以被Bookmark,而POST不可以躬翁。
* GET請求會被瀏覽器主動cache焦蘑,而POST不會,除非手動設置盒发。
* GET請求只能進行url編碼例嘱,而POST支持多種編碼方式。
* GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里宁舰,而POST中的參數(shù)不會被保留拼卵。
* GET請求在URL中傳送的參數(shù)是有長度限制的,而POST么有蛮艰。
* 對參數(shù)的數(shù)據(jù)類型腋腮,GET只接受ASCII字符,而POST沒有限制。
* GET比POST更不安全即寡,因為參數(shù)直接暴露在URL上徊哑,所以不能用來傳遞敏感信息。
* GET參數(shù)通過URL傳遞聪富,POST放在Request body中莺丑。
(本標準答案參考自w3schools)
2、不同的瀏覽器(發(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,也不能保證一定能被接收到哦姨蝴。
好了俊啼,現(xiàn)在你知道,GET和POST本質(zhì)上就是TCP鏈接左医,并無差別授帕。但是由于HTTP的規(guī)定和瀏覽器/服務器的限制,導致他們在應用過程中體現(xiàn)出一些不同浮梢。
3跛十、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得跑兩趟,第一趟厘擂,先去和服務器打個招呼“嗨昆淡,我等下要送一批貨來,你們打開門迎接我”刽严,然后再回頭把貨送過去昂灵。