基本區(qū)別
- Get在瀏覽器回退時是無害的,而Post會再次提交請求。無害的意思只是數(shù)據(jù)不變。冪等性
HTTP冪等方法,是指無論調(diào)用這個url多少次,都不會有不同的結(jié)果的HTTP方法。也就是不管你調(diào)用1次還是調(diào)用100次,1000次,結(jié)果都是一樣的(前提是服務器端的數(shù)據(jù)沒有被人為手動更改。比如說,你數(shù)據(jù)庫中的數(shù)據(jù)被手動更改過,那兩次調(diào)用的結(jié)果肯定是變化的) - GET產(chǎn)生的URL地址可以被收藏為書簽,而POST不可以。
- GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
- GET請求只能進行url編碼,而Post支持多種編碼方式。
- GET 請求參數(shù)會被完整保留在瀏覽器歷史記錄里,而POST不會被保留
- GET請求在URL中傳送的參數(shù)是有長度限制的,而POST沒有
- 對于參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符,post沒有限制
- GET比POST更不安全,因為參數(shù)直接暴露在url上,所以不能用來傳遞敏感信息
- GET參數(shù)通過URL傳遞,POST放在請求體(request body)中。
本質(zhì)區(qū)別
本質(zhì)上說,GET和POST都是http協(xié)議中的兩種方式,都是基于tcp/ip的。之所以區(qū)分get跟post。主要是為了方便區(qū)分。因為功能多了。總要區(qū)分嘛。瀏覽器也需要區(qū)分對待。不然統(tǒng)一處理的話難免會浪費一些資源啊。多消耗時間之類的。比如說get有長度限制。這都是瀏覽器限制的。所以說
GET和POST本質(zhì)上就是TCP鏈接,并無差別。但是由于HTTP的規(guī)定和瀏覽器/服務器的限制,導致他們在應用過程中體現(xiàn)出一些不同。
還有區(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返回數(shù)據(jù)。
ps 據(jù)研究,在網(wǎng)絡環(huán)境好的情況下,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視。而在網(wǎng)絡環(huán)境差的情況下,兩次包的TCP在驗證數(shù)據(jù)包完整性上,有非常大的優(yōu)點。
并不是所有瀏覽器都會在POST中發(fā)送兩次包,F(xiàn)irefox就只發(fā)送一次。
參考 感謝
99%的人都理解錯了HTTP中GET與POST的區(qū)別
如有錯誤。還請指正。非常感謝。