Home >> Blog >> get post 是什麼?

get post 是什麼?

HTTP POST請求在消息正文中從客戶端(瀏覽器)向伺服器提供附加資料。相反,GET請求在 URL 中包含所有必需的資料。HTML 中的表單可以通過在

元素中指定method="POST"或method="GET"(默認)來使用任何一種方法。指定的方法確定表單資料如何提交到伺服器。當方法為 GET 時,所有表單資料都被編碼到 URL 中,作為查詢字符串參數附加到操作URL。使用 POST,表單資料出現在 HTTP 請求的消息正文中。

對比圖

GET 與 POST

GET 與 POST

GET 與 POST

表單提交的差異

ETHOD="GET"和METHOD="POST"的根本區別在於它們對應不同的 HTTP 請求,正如HTTP 規範中所定義的那樣。兩種方法的提交過程以相同的方式開始 -表單資料集由瀏覽器構建,然後以enctype屬性指定的方式編碼。對於METHOD="POST,enctype屬性可以是multipart/form-data或application/x-www-form-urlencoded,而對於

METHOD="GET",只有application/x-www-form-urlencoded被允許。然後將該表單資料集傳輸到伺服器。

對於使用 METHOD="GET" 提交的表單,瀏覽器通過獲取action屬性的值並附加一個? 到它,然後附加表單資料集(使用 application/x-www-form-urlencoded 內容類型編碼)。然後瀏覽器處理這個 URL,就像跟隨一個鏈接(或者就像用戶直接輸入了 URL)。瀏覽器將 URL 分成幾部分並識別主機,然後向該主機發送 GET 請求,並將 URL 的其餘部分作為參數。伺服器從那裡拿走它。請注意,此過程意味著表單資料僅限於 ASCII 代碼。在以 ASCII 格式通過 URL 傳遞其他類型的字符時,應特別注意對它們進行編碼和解碼。

提交帶有 METHOD="POST" 的表單會導致發送 POST 請求,使用action屬性的值和根據enctype屬性指定的內容類型創建的消息。

優點和缺點

由於使用GET時表單資料是作為 URL 的一部分發送的——

  • 表單資料僅限於 ASCII 代碼。在以 ASCII 格式通過 URL 傳遞其他類型的字符時,應特別注意對它們進行編碼和解碼。另一方面,二進制資料、圖片等文件都可以通過METHOD="POST"提交
  • 填寫的所有表單資料都在 URL 中可見。此外,它還存儲在用戶瀏覽器的網頁瀏覽歷史/日誌中。這些問題使GET的安全性降低。
  • 但是,將表單資料作為 URL 的一部分發送的一個優點是可以為 URL 添加書籤並直接使用它們,並且完全繞過表單填寫過程。
  • 由於URL 長度有限,因此可以發送多少表單資料是有限制的。
  • 腳本小子可以更容易地暴露系統中的漏洞來破解它。例如,花旗銀行通過更改 URL 字符串中的帳號被黑客入侵。[1]當然,有經驗的黑客或網頁開發者即使使用 POST 也可以暴露此類漏洞;只是有點難。一般來說,伺服器必須對客戶端發送的任何資料保持懷疑,並防範不安全的直接對象引用。

伺服器端處理的差異

原則上,提交的表單資料的處理取決於它是使用METHOD="GET"還是METHOD="POST"發送的。由於資料以不同的方式編碼,因此需要不同的解碼機制。因此,一般來說,更改 METHOD 可能需要更改處理提交的腳本。例如,當使用 CGI 接口時,腳本在使用GET時接收環境變量 (QUERYSTRING) 中的資料。但是當使用POST時,表單資料在標準輸入流 ( stdin ) 中傳遞,並且要讀取的字節數由 Content-length 標頭給出。

當 GET 和 POST 變量發生衝突時會發生什麼?

在某些語言(例如 PHP)中,來自 GET 和 POST 參數的資訊除了可以單獨使用之外,還組合成一個方便的變量,例如 PHP 中的$_REQUEST。如果存在衝突——即,相同的參數名稱在 GET 和 POST 中使用不同的值——那麼衝突將通過某些規則解決。對於 PHP,優先級由variables_order配置指令決定。默認順序為 EGPCS(環境、GET、POST、Cookie、伺服器)。這意味著 $_GET 中的變量優先於 $_POST,而 $_POST 又優先於 $_COOKIE。

推薦用法

在提交“冪等”表單時建議使用 GET - 那些不會“顯著改變世界狀態”的表單。換句話說,只涉及資料庫查詢的表單。另一種觀點是,多個冪等查詢將具有與單個查詢相同的效果。如果涉及到資料庫更新或觸發郵件等其他動作,建議使用 POST。

來自Dropbox 開發者博客:

瀏覽器並不確切知道特定 HTML 表單的作用,但如果表單是通過 HTTP GET 提交的,則瀏覽器知道如果出現網絡錯誤,自動重試提交是安全的。對於使用 HTTP POST 的表單,重試可能不安全,因此瀏覽器首先要求用戶確認。

“GET”請求通常是可緩存的,而“POST”請求幾乎不可能。對於查詢系統,這可能會對效率產生相當大的影響,尤其是在查詢字符串很簡單的情況下,因為緩存可能會服務於最頻繁的查詢。

在某些情況下,即使對於冪等查詢,也建議 使用POST :

  • 如果表單資料包含非 ASCII 字符(例如重音字符),則METHOD="GET"原則上是不適用的,儘管它在實踐中可能有效(主要用於ISO Latin 1 字符)
  • 如果表單資料集很大——比如說,數百個字符——那麼METHOD="GET"可能會導致無法處理長 URL 的實現出現實際問題。
  • 您可能希望避免使用METHOD="GET"以使其對用戶不太可見表單的工作方式,尤其是為了通過不出現在 URL 中來使“隱藏”字段 (INPUT TYPE="HIDDEN") 更加隱藏。但即使您使用METHOD="POST"的隱藏字段,它們仍然會出現在 HTML 源代碼中。

HTTPS 呢?

2015 年 5 月 15 日更新:特別是在使用 HTTPS(基於 TLS/SSL 的 HTTP)時,POST 是否提供比 GET 更高的安全性?

這是個有趣的問題。假設您向網頁發出 GET 請求:

獲取 https://www.example.com/login.php?user=mickey&passwd=mini

假設您的 Internet 連接正在被監視,那麼窺探者可以使用有關此請求的哪些資訊?如果改用 POST,並且用戶和密碼資料包含在 POST 變量中,那麼在 HTTPS 連接的情況下會更安全嗎?

答案是不。如果您發出這樣的 GET 請求,監控您的網絡流量的攻擊者將只知道以下資訊:

  1. 您建立了 HTTPS 連接的事實
  2. 主機名 - www.example.com
  3. 請求的總長度
  4. 響應的長度

URL 的路徑部分——即請求的實際頁面以及查詢字符串參數——在它們“通過網絡”傳輸時受到保護(加密),即在傳輸到目標伺服器的途中。POST 請求的情況完全相同。

然而,即使在 HTTPS 的情況下, POST方法仍然保留了一個優勢。Web 伺服器傾向於在其訪問日誌中以純文本形式記錄整個請求的 URL;所以通過 GET 發送敏感資訊不是一個好主意。無論使用 HTTP 還是 HTTPS,這都適用。

post

certificate

exercises

exercises

method

the

quiz

quiz

get

get

get

get

get

get

get

get

get

get

get

get

get

get

get

get

get

get

get

get

sub child category

numpy learn pandas