面試中經常考到 HTTP中GET,POST和PUT的區別,記錄一下
1、PUT和POST
PUT和POST都有更改指定URI的語義.但PUT被定義為idempotent的方法,POST則不是.idempotent的方法:如果一個方法重復執行
多次,產生的效果是一樣的,那就是idempotent的。也就是說:
PUT請求:如果兩個請求相同,后一個請求會把第一個請求覆蓋掉。(所以PUT用來改資源)
POST請求:后一個請求不會把第一個請求覆蓋掉。(所以Post用來增資源)
舉個例子,注冊時用的是POST,修改個人信息的時候使用PUT
2、GET和POST
1、GET參數通過URL傳遞,POST放在Request body中。
2、GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
3、GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。
4、Get 請求中有非 ASCII 字符,會在請求之前進行轉碼,POST不用,因為POST在Request body中,通過 MIME,也就可以傳輸非 ASCII 字符。
5、 一般我們在瀏覽器輸入一個網址訪問網站都是GET請求
6、HTTP的底層是TCP/IP。HTTP只是個行為准則,而TCP才是GET和POST怎么實現的基本。GET/POST都是TCP鏈接。GET和POST能做的事情是一樣一樣的。但是請求的數據量太大對瀏覽器和服務器都是很大負擔。所以業界有了不成文規定,(大多數)瀏覽器通常都會限制url長度在2K個字節,而(大多數)服務器最多處理64K大小的url。
7、GET產生一個TCP數據包;POST產生兩個TCP數據包。對於GET方式的請求,瀏覽器會把http header和data一並發送出去,服務器響應200(返回數據);而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
8、在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。但並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。
3、總結
參考鏈接:https://www.jianshu.com/p/c1737c09f9e5