GET和POST的區別可以說是面試常考的題目
到底有什麼區別,簡單總結了一下。
最直觀的就是:
GET的url可以手動輸入·,所有信息都包含在url中,所以不能傳遞敏感信息。
POST通過request body傳遞參數。
GET受到URL長度限制,不適合做大量數據傳輸和提交。
二:
GET能被瀏覽器主動緩存到歷史記錄中和web服務器日誌裏面,POST使用後就基本沒有了。如果你的歷史記錄被別人看了或者被入侵web服務器日誌,基本泄漏可能性爲100%。這是POST似乎要安全點一點點。不過還是需要用https來解決問題,萬一被抓包了,怎麼辦?
三:
GET和POST的底層都是TCP/IP,本質都是TCP鏈接。
GET和POST一個重大的區別就是:
GET產生一個TCP數據包;
POST產生兩個數據包。
仔細說:
GET的請求方式是:
瀏覽器會把http header和data 一併發送出去,服務器響應200(返回數據)。
而POST的請求方式是:
瀏覽器先發送header,服務器響應100continue,瀏覽器再發送data,服務器響應200 (返回數據)。
來個例子的就是:
GET只需要汽車一次就把貨送到了,而POST得跑兩次,第一次先去和服務器打個招呼“嗨,我等下要送一批貨來,你們打開門來迎接我”,然後再回頭把貨送過去。
因爲POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。因此Yahoo團隊有推薦用GET替換POST來優化網站性能。但這是一個坑!跳入需謹慎。爲什麼?
1. GET與POST都有自己的語義,不能隨便混用。
2. 據研究,在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。
3. 並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。