HTTP POST GET 本質區別詳解

2021-09-08 03:35:15 字數 1610 閱讀 2260

http post get 本質區別詳解

從http get和post的區別說起

一般在瀏覽器中輸入**訪問資源都是通過get方式;在form提交中,可以通過method指定提交方式為get或者post,預設為get提交。http定義了與伺服器互動的不同方法,最基本的方法有4種,分別是get,post,put,delete。

url全稱是資源描述符,我們可以這樣認 為:乙個url位址,它用於描述乙個網路上的資源,而http中的get,post,put,delete就對應著對這個資源的查 、改 、增 、刪 4個操作。

根據http規範,get用於資訊獲取,而且應該是安全的和冪等的,可以參見安全的(safe)和冪等的(idempotent)。

安全的是指沒有明顯的對使用者有影響的***(包括修改該資源的狀態)。http方法裡的get和head都是安全的。

冪等的是指乙個方法不論多少次操作,結果都是一樣。put(把內容放到指定url),delete(刪除某個url代表的資源),雖然都修改了資源內容,但多次操作,結果是相同的,因此和head,get一樣都是冪等的。

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

通常情況下我們都說post的安全性要比get的安全性高(注意:這裡所說的安全性和上面get提到的「安全」不是同個概念。上面「安全」的含義僅僅是不作資料修改,而這裡安全的含義是真正的security的含義),比如:通過get提交資料,使用者名稱和密碼將明文出現在url上,比如有乙個常見的url:login.action?name=hyddd&password=idontknow&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請求返回內容

HTTP POST GET 本質區別

http協議定義了與伺服器互動的不同方法,最基本的4種 get post put delete url,即資源描述符,描述網路上的乙個資源,上面的4種方法就對應著對這個資源的查,改,增,刪。get一般用於獲取 查詢資源資訊,post一般用於更新資源資訊。這是協議設計的規範要求,但是實際中,由於種種原...

HTTP POST GET 本質區別詳解

一 原理區別 一般在瀏覽器中輸入 訪問資源都是通過get方式 在form提交中,可以通過method指定提交方式為get或者post,預設為get提交 http定義了與伺服器互動的不同方法,最基本的方法有4種,分別是get,post,put,delete url全稱是資源描述符,我們可以這樣認為 乙...

HTTP POST GET 本質區別詳解

http post get 本質區別詳解 從http get和post的區別說起 一般在瀏覽器中輸入 訪問資源都是通過get方式 在form提交中,可以通過method指定提交方式為get或者post,預設為get提交。http定義了與伺服器互動的不同方法,最基本的方法有4種,分別是get,post...