get和post一般的區別
get和post一般的區別:
1.post更安全(不會作為url的一部分,不會被快取、儲存在伺服器日誌、以及瀏覽器瀏覽記錄中)
2.post傳送的資料量更大(get有url長度限制)
3.post能傳送更多的資料型別(get只能傳送ASCII字元)
4.post比get慢
5.Post是向伺服器提交資料的一種請求,get是向伺服器發索取資料的一種請求。
6.get會將資料快取起來,而post不會
但是,get比post更快
post請求包含更多的請求頭
post在真正接受資料之前會先將請求頭髮送給伺服器進行確認,然後才真正傳送資料
post請求的過程:
1.瀏覽器請求tcp連線(第一次握手)
2.伺服器答應進行tcp連線(第二次握手)
3.瀏覽器確認,併發送post請求頭(第三次握手,這個報文比較小,所以http會在此時進行第一次資料傳送)
4.伺服器返回100 continue響應
5.瀏覽器開始傳送資料
6.伺服器返回200 ok響應
get請求的過程
1.瀏覽器請求tcp連線(第一次握手)
2.伺服器答應進行tcp連線(第二次握手)
3.瀏覽器確認,併發送get請求頭和資料(第三次握手,這個報文比較小,所以http會在此時進行第一次資料傳送)
4.伺服器返回200 ok響應。
那麼 GET 相對 POST 的優勢是什麼
GET 的URL可以人手輸,本質上面, GET 的所有資訊都在URL, 所以很方便的記錄下來重複使用。 如果你期望你複製的url資源可以更好的分享給別人看,就用GET方法吧POST方法做不到
從深層次上分析:
雖然這兩者都是明文傳送。但它們表達的語義不一樣,這決定了主幹網路可以對其做不同的處理。
get表達的是一種冪等的,只讀的,純粹的操作,即它除了返回結果不應該會產生其它副作用(如寫資料庫),因此絕大部分get請求(通常超過90%)都直接被CDN快取了,這能大大減少web伺服器的負擔。
而post所表達的語義是非冪等的,有副作用的操作,所以必須交由web伺服器處理。
把所有get請求換成post,意味著主幹網路上的所有CDN都廢掉了,web伺服器要處理的請求數量將成百上千倍地增加