天天看點

HTTP POST GET 本質差別詳解

<a href="http://blog.csdn.net/gideal_wang/article/details/4316691">HTTP POST GET 本質差別詳解</a>

<a href="http://www.yining.org/2010/05/04/http-get-vs-post-and-thoughts/">從HTTP GET和POST的差別說起</a>

  一般在浏覽器中輸入網址通路資源都是通過GET方式;在FORM送出中,可以通過Method指定送出方式為GET或者POST,預設為GET送出。Http定義了與伺服器互動的不同方法,最基本的方法有4種,分别是GET,POST,PUT,DELETE。

  URL全稱是資源描述符,我們可以這樣認 為:一個URL位址,它用于描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查 、改 、增 、删 4個操作。

安全的是指沒有明顯的對使用者有影響的副作用(包括修改該資源的狀态)。HTTP方法裡的GET和HEAD都是安全的。

幂等的是指一個方法不論多少次操作,結果都是一樣。PUT(把内容放到指定URL),DELETE(删除某個URL代表的資源),雖然都修改了資源内容,但多次操作,結果是相同的,是以和HEAD,GET一樣都是幂等的。

  是以根據HTTP協定,GET是安全的,也是幂等的,而POST既不是安全的,也不是幂等的。但在實際應用中,以上2條規定并沒有這麼嚴格。比如,新聞站點的頭版不斷更新。雖然第二次請求會傳回不同的一批新聞,該操作仍然被認為是安全的和幂等的。因為它總是傳回目前的新聞。從根本上說,如果目标是當使用者打開一個連結時,他可以确信從自身的角度來看沒有改變資源即可。

  通常情況下我們都說POST的安全性要比GET的安全性高(注意:這裡所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作資料修改,而這裡安全的含義是真正的Security的含義),比如:通過GET送出資料,使用者名和密碼将明文出現在URL上,比如有一個常見的url:login.action?name=hyddd&amp;password=idontknow&amp;verify=%E4%BD%A0 %E5%A5%BD,通過這個url我們就知道該使用者的使用者名是:hyddd,密碼是idontknow。但是就因為這個原因說 POST 比 GET 安全是錯的,因為POST和GET都是明文傳輸,用httpfox等插件,或者像WireShark 等類似工具就能觀察到。

  POST和GET的差别其實是很大的。語義上,GET是擷取指定URL上的資源,是讀操作,重要的一點是不論對某個資源GET多少次,它的狀态是不會改變的,在這個意義上,我們說GET是安全的(不是被密碼學或者資料保護意義上的安全)。因為GET是安全的,是以GET傳回的内容可以被浏覽器,Cache伺服器緩存起來(其中還有很多細節,但不影響這裡的讨論)。

  而POST的語意是對指定資源“追加/添加”資料,是以是不安全的,每次送出的POST,參與的代碼都會認為這個操作會修改操作對象資源的狀态,于是,浏覽器在你按下F5的時候會跳出确認框,緩存伺服器不會緩存POST請求傳回内容。

本文轉自xwdreamer部落格園部落格,原文連結http://www.cnblogs.com/xwdreamer/archive/2012/05/24/2517017.html,如需轉載請自行聯系原作者

繼續閱讀