【每日一題】get和post的區(qū)別

人生苦短,總需要一點儀式感。比如學(xué)前端~
get 和 post
get參數(shù)通過URL傳遞方式,post放在Request body中。 get請求會被瀏覽器主動緩存(cache),而post不會,除非手動設(shè)置。(緩存一般只適用于那些不會更新服務(wù)端數(shù)據(jù)的冪等請求。 get請求參數(shù)會被完整保留在瀏覽器歷史記錄里,而post中的參數(shù)不會被保留。 get請求中有非ASCII字符,會在請求之前進行轉(zhuǎn)碼,POST不用,因為post在Request body中,通過MIME,也就可以傳輸非ASCII字符。 一般我們在瀏覽器輸入一個網(wǎng)址訪問網(wǎng)站都是get請求 HTTP的底層是TCP/IP。HTTP只是個行為準(zhǔn)則,而TCP才是get和post怎么實現(xiàn)的基本。get/post都是TCP鏈接。get和post能做的事情是一樣一樣的。但是請求的數(shù)據(jù)量太大對瀏覽器和服務(wù)器都是很大負(fù)擔(dān)。所以業(yè)界有了不成文規(guī)定,(大多數(shù)) 瀏覽器通常都會限制url長度在2K個字節(jié),而(大多數(shù))服務(wù)器最多處理64K大小的url。 get產(chǎn)生一個TCP數(shù)據(jù)包; post產(chǎn)生兩個TCP數(shù)據(jù)包。對于get方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200 (返回數(shù)據(jù)) ;而對于post,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok (返回數(shù)據(jù)) 在網(wǎng)絡(luò)環(huán)境好的情況下,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視。而在網(wǎng)絡(luò)環(huán)境差的情況下,兩次包的TCP在驗證數(shù)據(jù)包完整性上,有非常大的優(yōu)點。但并不是所有瀏覽器都會在post中發(fā)送兩次包,Firefox就只發(fā)送一次。
冪等(idempotent)
如果一個方法重復(fù)執(zhí)行多次,產(chǎn)生的效果是一樣的。我們就將其定義為冪等的。
比如:
get請求: 通常用于獲取數(shù)據(jù),執(zhí)行多次和執(zhí)行一次得到的結(jié)果一樣(不考慮數(shù)據(jù)被其他入口改動)。 put請求:如果兩個請求相同,后一個請求會把第一個請求覆蓋掉。(所以PUT用來改資源) post請求:后一個請求不會把第一個請求覆蓋掉。(所以post用來增加資源)

讓我們一起攜手同走前端路!
關(guān)注公眾號回復(fù)【加群】即可

● 三欄響應(yīng)式布局(左右固寬中間自適應(yīng))的5種方法
評論
圖片
表情
