Get 與 Post 的區別

Get 和 Post 是從客戶端瀏覽器向服務器發送數據參數的 HTTP 方法。這些參數可以是表單的輸入、搜索標籤的查詢等。每當網頁需要響應給用戶相應的響應,或者我們甚至將其稱爲用戶交互網頁,這些 HTTP 方法就扮演了一個重要的角色,爲服務器提供用戶特定的輸入。但是你可能想知道爲什麼我們需要兩個不同的方式來發送輸入內容。爲了回答這個問題,理解這些方法的工作原理是很重要的,這樣你就可以更好的理解實際的差異。

語法
首先讓我們看下 HTTP 方法中 Get 和 Post 的語法。

這是 Get 的語法:

<form action=”Login.php” method=”get”>

這是 Post 的語法:

<form action=”Login.php” method=”post”> 

除了 Get 和 Post 這兩個單詞的差別外,語法上並沒有什麼大的不同。

如何將輸入內容發送到服務器?
在 Get 方法中,輸入的內容是被追加到 URL 的 “?”後的。然而在 Post 方法中,它是被分別作爲消息發送的。有時候,你可能會在按下回車鍵後在 URL 中看到搜索查詢。如果沒有的話,在 Google 上試下。如果是 Get 方法,你可以在同一個網址中注意到搜索查詢後的 “?”。與此同時,當我們使用 Post 時,我們無法在 URL 中讀取輸入內容,因爲它是單獨的,不和 URL 一塊使用。

輸入類型
當 Get 將輸入內容追加到 URL 的“?”後,它應該採用 ASCII 字符的形式。但是 Post 甚至可以不受任何限制發送二進制數據。因此,Post 對輸入類型更加靈活,因爲它既可以使用 ASCII 也可以使用二進制數據。

參數數量
與 Post 相比,Get 方法只能發送有限的參數。通常,它被限制在 2k。在某些情況下,服務器可以處理數量達 64k 的參數。但是 Post 方法甚至能夠以消息的形式向服務器發送文件。沒錯,當我們比較這二者時,我們可以說能夠發送更多作爲消息的參數的 Post 方法更好。

輸入大小
一般來說,允許 URL 的最長長度取決與我們使用的瀏覽器和處理 URL 請求的 web 服務器。由於 Get 隨 URL 一起發送輸入內容,我們最多可以發送 2048 個字符,而且在某些情況下,它是會變的。但是當我們使用 Post 方法時,對輸入大小沒有限制。

輸入可見性
如果你在 Google 搜索上試過的話,你就會知道在 Get 的情況下,其他人是可以看到你的輸入內容的。這是因爲,輸入的內容只是附加到了 URL 的後面,任何人都可以在 URL 中看到它。但是,如果使用 Post 方法,那麼沒有人可以知道我們輸入的內容。如果你不關注輸入內容的可見性,請繼續使用 Get。否則,請使用 Post。

默認方法
到目前爲止,你可以已經瞭解了這兩種方式是如何向服務器發送輸入內容的。由於參數的使用以及傳輸的便利性,HTTP 的默認方法已經被選擇爲“Get”。儘管 Post 方法比 Get 方法的優點更多,但是作爲默認使用的情況下,比較簡單的 Get 方法有着更高的優先級。因此,若沒有指定具體的方法,則將其視爲 Get 請求。

瀏覽器歷史記錄
由於 Get 方法通過 URL 發送數據,已經發送的數據仍然保留在瀏覽器的歷史記錄中,任何人都可以通過查看我們的瀏覽器歷史記錄從而查看我們發送到服務器的內容。Post 方法則不會給他人創建這樣的機會,因爲它不允許瀏覽器保存信息。事實上,當數據通過 Post 方式發送到服務器的時候和瀏覽器沒有任何關係,因爲這些內容是通過消息發送的。

哪個是安全的?
我們已經分析了 Get 和 Post 方法之間的各種差異,現在是時候去知道哪種是安全的了。讓我們看看各種安全因素從而確定相同點。

  • 書籤

    Get 方法允許保存書籤,但 Post
    不允許。任何人都可以看到被收藏的數據,這絕對是一個安全威脅。如果你的數據中包含很多的敏感信息,比如密碼、銀行賬戶信息等,那麼 Get
    方法可以將這些信息泄露給其他人。因此,如果處理敏感信息的話,最好使用 Post。

  • 緩存

    緩存存儲的信息方便了以後的檢索,也節省了我們的時間。儘管它看起來很有用,但是當緩存的信息泄露到壞人手中時,存在了數據泄露的可能性。Get
    允許有緩存,而 Post 不允許緩存。因此,Post 比 Get 更安全。

  • 刷新或後退

    當我們點擊刷新或者後退圖標時,網頁的 URL
    會被重新執行。但是,當舊數據存在與我們系統的緩存中時,不會執行這種重新執行的操作。因此,在這種情況下,當你刷新或者後退時,你有可能獲取以及從服務器獲取的數據。我們應該知道這種情況什麼時候發生,是
    Get 還是 Post?正如我們已經知道的那樣,緩存情況出現在 Get 而不是 Post,舊數據的檢索可能只使用 Get 進行。即使使用
    Post 也會發生這種情況,但是,在執行操作之前需要徵求用戶的許可。每次,我們在使用 Post 時會在執行此類檢索時收到警告。

  • 破解

    技術強大的人可以輕鬆破解 Get 方法相關的 URL 從而獲取我們的信息,但是在 Post
    的情況下是不可能的,至少他們需要下很多的功夫來破解。所以在大多數情況下,使用 Post 比使用 Get 更安全。

何時使用 Get?何時使用 Post?
從我們的討論中可以清楚的得出:Get 的安全性較差,在處理大量敏感信息時使用 Get 是不可取的。在 Get 的情況下,瀏覽器緩存和瀏覽器的歷史記錄可以把我們的信息泄露給其他人。但是即使是在這樣的情況下,Post 仍是安全的,因爲它不允許緩存以及添加書籤等。因此,當你需要發送大量安全信息時,最好使用 Post。

以上內容翻譯自:
Difference Between Get And Post | Difference Between
能力有限,還望斧正。

另關聯閱讀:
爲什麼使用 HTTPS
HTTP 狀態碼
————————————————
轉載原文鏈接:https://mindartisan.blog.csdn.net/article/details/103553915

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