GET和POST的區別

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就只發送一次。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章