put和post

1. 有啥區別?

put和post的技術實現上沒有很大區別,區別主要體現在協議語義上。

2. 爲什麼遵守?

如果只有語義上的區別,那麼不遵守有什麼問題呢?

規範帶來的好處是很多的,就像是開發人員的語言一樣,當大家遵守同樣的規範,溝通才更容易,不至於導致出現問題。公司內部還行,但是如果牽涉到外部工具或者其他公司開發合作,那還是會有問題的。舉個比較嚴重的例子。chrome瀏覽器爲了加快頁面加載,會在頁面預加載某些GET鏈接(跳轉鏈接,非資源鏈接),這樣用戶點那個鏈接時,加載速度就很快。有一個圖片網站,使用GET請求,參數裏面有個OPT用來表示動作。用戶打開頁面時,嵌入了OPT=“DEL”的鏈接在圖片附近的表單中,然後就被Chrome刪除了。再舉個其他可能接觸的例子。公司可能使用工具解析client請求,來分析請求的分佈等信息。如果client的User-Agent字段沒有遵守協議標準,那麼工具將無法正確統計,這樣的例子很多。標準的存在意義就是爲了統一概念,這樣即使從未見面的人,各個國家不同語種的人,甚至火星人也能輕鬆交流。

3. 什麼區別?

HTTP協議使用的是URI,是一種資源標誌,那麼對應的HTTP Verb就是各種對資源的操作,GET,PUT,DELETE等,明確這些,再往下看。

3.1PUT

client對一個URI發送一個Entity,服務器在這個URI下如果已經有了一個Entity,那麼此刻服務器應該替換成client重新提交的,也由此保證了PUT的冪等性。如果服務器之前沒有Entity ,那麼服務器就應該將client提交的放在這個URI上。總結一個字:PUT,PUT的方法就是其字面表意,將client的資源放在請求URI上。對於服務器到底是創建還是更新,由服務器返回的HTTP Code來區別。注:通過上面可以知道,如果用PUT來達到更改資源,需要client提交資源全部信息,如果只有部分信息,不應該使用PUT(因爲服務器使用client提交的對象整體替換服務器的資源)。

3.2 POST

這個Verb是比較特殊。不同於一般的增刪改,使用場景比較多。根據RFC文檔上描述,有以下幾個場景:對現有資源的註解;向公告板、郵件羣組、文章羣組中提交消息;提交一個數據塊(就像表單提交的結果),到數據處理過程;通過附加操作擴展數據庫。

因爲服務器實現POST是不可預知,所以將其定義爲不安全、不冪等的Verb。基本上不能方便的歸納爲“增刪改”之類的行爲,都可以使用POST方法;另外可以使用POST去實現“部分更新資源”。

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