深度分析一下GET 和 POST 究竟有什麼區別

2021-10-23 22:18:29 字數 2516 閱讀 4589

http 定義了一組請求方法,以表明要對給定資源執行的操作。這些方法是一組有語義的動詞或名字,主要有get/head/post/put/delete/conect/options/trace/patch,我們最常用的是 get 和 post,

注意:post的服務方式,在form標籤中設定屬性,除此之外,所有的提交方式都是get的提交方式

http方法的幾個性質

1.safe- 安全

這裡的「安全」和通常理解的「安全」意義不同,如果乙個方法的語義在本質上是「唯讀」的,那麼這個方法就是安全的。客戶端向服務端的資源發起的請求如果使用了是安全的方法,就不應該引起服務端任何的狀態變化,因此也是無害的。 此rfc定義,get, head, options 和 trace 這幾個方法是安全的。但是這個定義只是規範,並不能保證方法的實現也是安全的,服務端的實現可能會不符合方法語義,正如上文說過的使用get修改使用者資訊的情況。引入安全這個概念的目的是為了方便網路爬蟲和快取,以免呼叫或者快取某些不安全方法時引起某些意外的後果。user agent(瀏覽器)應該在執行安全和不安全方法時做出區分對待,並給使用者以提示。

2. idempotent - 冪等

冪等的概念是指同乙個請求方法執行多次和僅執行一次的效果完全相同。按照rfc規範,put,delete和安全方法都是冪等的。同樣,這也僅僅是規範,服務端實現是否冪等是無法確保的。引入冪等主要是為了處理同乙個請求重**送的情況,比如在請求響應前失去連線,如果方法是冪等的,就可以放心地重發一次請求。這也是瀏覽器在後退/重新整理時遇到post會給使用者提示的原因:post語義不是冪等的,重複請求可能會帶來意想不到的後果。

3.cacheable - 可快取性

在這三個特性裡一直在強調同乙個事情,那就是協議不等於實現:協議規定安全在實現裡不一定安全,協議規定冪等在實現裡不一定冪等,協議規定可快取在實現裡不一定可快取。這其實就是上面那個作者提到的specification和implementation的關係。

get當客戶端要從伺服器端讀取某個資源是,使用get方法。get方法要求伺服器將url定位的資源放在響應報文的資料部分,回送給客戶端,即向伺服器請求某個資源。使用get方法是,請求引數和對應的值附加在url後面,用?代表url 的結尾與請求引數的開始,引數之間用&隔開

post

當客戶端給伺服器提供資訊較多時可以使用post方法,post方法向伺服器提交資料,比如完成表單資料的提交,將資料提交給伺服器處理。get一般用於獲取/查詢資源資訊,post會附帶使用者資料,一般用於更新資源資訊。post 方法將請求引數封裝在http 請求資料中,以名稱/值的形式出現,可以傳輸大量資料

head

head跟get相似,不過服務端接收到head請求時只返回響應頭,不傳送響應內容。所以,如果只需要檢視某個頁面的狀態時,用head更高效,因為省去了傳輸頁面內容的時間

delete

刪除某乙個資源

options

用於獲取當前url所支援的方法。若請求成功,會在http頭中包含乙個名為「allow」的頭,值是所支援的方法,如「get, post」

put把乙個資源存放在指定的位置上

trace

回顯伺服器收到的請求,主要用於測試或診斷

connect

connect方法是http/1.1協議預留的,能夠將連線改為管道方式的**伺服器。通常用於ssl加密伺服器的鏈結與非加密的http**伺服器的通訊

get的特點

get方法請求乙個指定資源的表示形式. 使用get的請求應該只被用於獲取資料.

post的特點

post方法用於將實體提交到指定的資源,通常導致狀態或伺服器上的***的更改.

get比較於post

get在瀏覽器回退時是無害的,而post會再次提交請求。

get產生的url位址可以被加入到書籤,而post不可以。

get請求會被瀏覽器主動cache,而post不會,除非手動設定。

get請求只能進行url編碼,而post支援多種編碼方式。

get請求引數會被完整保留在瀏覽器歷史記錄裡,而post中的引數不會被保留。

get請求在url中傳送的引數是有長度限制的,而post麼有。

對引數的資料型別,get只接受ascii字元,而post沒有限制。

get比post更不安全,因為引數直接暴露在url上,所以不能用來傳遞敏感資訊。

get引數通過url傳遞,post放在request body中。

大多數瀏覽器通常都會限制url長度在2k個位元組,而大多數伺服器最多處理64k大小的url。

get 請求是冪等的,而 post 不是。

get請求的頁面可以被收藏為書籤,post則相反

get請求會被瀏覽器主動cache,而post不會,除非手動設定

get在瀏覽器回退時是無害的,而post會再次提交請求

get請求只能進行url編碼,而post支援多種編碼方式

get請求引數會被完整保留在瀏覽器歷史記錄裡,而post中的引數不會被保留

對引數的資料型別,get只接受ascii字元,而post沒有限制

分析一下Overload和Override的區別

overload是過載的意思,表示在同乙個類中,允許存在乙個以上的同名函式,只要他們的引數個數或者引數型別不同即可。override是覆蓋的意思,也就是重寫,它與返回值型別無關,只看引數列表。兩者不同主要體現在 1 目的 overload用於增加程式的可讀性 做法不同但是做的同一事情 overrid...

記錄一下paddlepaddle深度學習心得

最近深度學習那叫乙個火啊,本人也入坑了,但網上找的內容也都亂七八糟的,那些 在本地執行頻頻出錯,硬體成本更是感人,自學成本太高了,又浪費時間。利用動態圖機制實現手寫數字識別 用paddlepaddle實現 密度估計 用paddlepaddle實現人臉識別 用paddlepaddle識別手勢 課程截圖...

get和post的一些簡單區別

今天在網上發現了乙個帖子是關於get和post的區別的,就總結一下,有不對的地方還望指正 這是在菜鳥教程上講到的 與 post 相比,get 更簡單也更快,並且在大部分情況下都能用。然而,在以下情況中,請使用 post 請求 再者就是從中的大神的帖子中看到的一些 post表示可能修改變伺服器上的資源...