HTTP verb GET 和 POST 有什麼差異?
我想大多數人對於HTTP傳輸協定並不陌生,網路的運作透過客戶端(Client)請求與伺服器端(Server)回應來交換資源。
HTTP有八種Methods,也就是對這組資料執行什麼動作,最常見的為以下五種:
- GET:讀取資料
- POST:新增資料
- PATCH:修改資料
- PUT:修改資料
- DELETE:刪除資料
依照字面上的意思不難懂,但實際運作的狀況GET/POST 都是透過傳送資料的方式,那差別在哪呢?「POST比GET還要安全」這是大家最直覺的想法。
事實上這也是我最一開始所認知的差異,那為什麼呢?
可以將GET比喻為明信片,因為明信片沒有信封可以裝(正常來說),所以必須將資料都寫在明信片上頭直到寫滿為止,而運送的過程中經手人都可以看光光,甚至到達信箱時你的鄰居也可以偷看到內容,洩漏度100%阿!
POST則是一封信,因為有信封(message-body),所以資料填寫內容也是遠勝GET明信片,而有信封的關係,除非有人惡意拆信(駭客攻擊),不然保密度也是大勝!
所以當我們想要夾帶資料給伺服器時,都會選用POST!目前為止,一切都很合理呀!但就是有那麼一個 What if
既然兩者都是傳輸POST也更安全,為什麼不能用POST取代GET呢?
這兩個都是傳送,但有一個小小細節,就是GET的URL會被存放在瀏覽器的歷史紀錄裡;POST則發送後什麼都沒有留下!
GET的優勢在於,GET所有信息都在URL很方便被重複使用也能夠在瀏覽器被人手動輸入(單純請求網址)
所以如果希望請求的URL可以被緩存,可以被搜尋引擎收錄,可以輕鬆轉發給他人,那就用GET!
如果你不希望有些動作輕易被他人手動輸入比方刪除功能,那就用POST!
以上是自己的小小筆記!