事實上GET 和 POST 在實踐上面有非常大的區別,這兩種方法在語義上面并非能互相取代。
http協議規定GET是獲取資源的方法,POST是創建資源的方法。
POST 是否比 GET 安全是的, POST要比GET安全一點點,注意,是一點點。。。
說這兩者都是明文傳送當然是沒有錯的了,但是這里有一個細節,就是GET的URL會被放在瀏覽器歷史和WEB 服務器日志里面。POST 發完基本就木有了。。所以 如果你把關鍵數據放在GET里面,被人偷窺了瀏覽器,或者WEB服務器被入侵日志被人倒去了,基本泄露可能性100%。
而POST來說,日志沒有記錄,只要數據庫服務器不被入侵,基本還是安全的。當然如果被抓了包,這一切都沒有什么卵用,所以,HTTPS該用還是得用。
GET 相對 POST 的優勢是什么最大的優勢是, GET 的URL可以人肉手輸啊。。。你在地址欄打個POST給我看看。
本質上面, GET 的所有信息都在URL, 所以很方便的記錄下來重復使用。所以如果你希望
- 請求中的URL可以被手動輸入
- 請求中的URL可以被存在書簽里,或者歷史里,或者快速撥號里面,或者分享給別人。
- 請求中的URL是可以被搜索引擎收錄的。
- 帶云壓縮的瀏覽器,比如Opera mini/Turbo 2, 只有GET才能在服務器端被預取的。- 請求中的URL可以被緩存。
請使用GET. 大家有沒有注意到,其實這里面很多方面的要求是和網站的運營相關的,而不是技術相關的。任何的技術行為中,其實多多少少都能看到商業的影子。反之,就用POST. 特別是有一些東西你是不想讓人家可以在瀏覽器地址欄里面可以輸入的。比如,如果你設計一個blog系統, 設計這樣一個URL來刪掉所有帖子。http://myblog.com/?action=delete_all
我只能說很快你就知道什么叫不作死就不會死這個道理了,搜索引擎的爬蟲分分鐘教你做人。另外一個準則是,可以重復的交互,比如取個數據,跳個頁面, 用GET.不可以重復的操作, 比如創建一個條目/修改一條記錄, 用POST, 因為POST不能被緩存,所以瀏覽器不會多次提交。
如果站在傳輸協議的角度來看 POST 完全可以代替 GET,會覺得 GET的存在沒有必要。如果站在應用協議的角度,任何應用程序都少不了“增刪改查”功能,HTTP 協議的方法除了 POST、GET外還有 DELETE和PUT,他們剛好是對應的:POST是添加,DELETE是刪除,PUT是修改,GET是查詢,至于增刪改查的具體內容每個應用都不同,但是他們都可以用URL定位,內容在HTTP里叫做“資源”,所以URL叫“統一資源定位符”。RESTful API 正是按照這種方式來定義的,大家都用 HTTP 協議提供 API 不是偶然,而是就是為此而設計的。