使用 GET 或 POST 方法有什麼不同?哪一種比較安全?它們各自的優缺點是什麼?
GET
POST
(類似問題)
當使用者在表單中輸入資訊並按一下「提交」時,可以透過兩種方式將資訊從瀏覽器傳送到伺服器:在 URL 中,或在 HTTP 請求正文中。
前面範例中使用的 GET 方法將名稱/值對附加到 URL。不幸的是,URL 的長度是有限的,因此此方法僅在參數很少的情況下才有效。如果表單使用大量參數,或者參數包含大量數據,則 URL 可能會被截斷。此外,在 URL 上傳遞的參數在瀏覽器的位址欄位中可見,而不是顯示密碼的最佳位置。
GET 方法的替代方法是 POST 方法。此方法將名稱/值對打包在 HTTP 請求的正文中,這使得 URL 更清晰,並且對表單輸出沒有大小限制。它也更安全。
這不是安全問題。 HTTP 協定將 GET 類型的請求定義為冪等,而 POST 可能有副作用。用簡單的英語來說,這意味著 GET 用於查看某些內容而不更改它,而 POST 用於更改某些內容。例如,搜尋頁面應使用 GET,而更改密碼的表單應使用 POST。
另外,請注意 PHP 有點混淆了這些概念。 POST 請求從查詢字串和請求正文取得輸入。 GET 請求只是從查詢字串取得輸入。所以POST 請求是GET 請求的超集;您可以在POST 請求中使用$_GET,甚至可以在$_POST 和$_GET 中使用相同名稱的參數這意味著不同的事情。
$_GET
$_POST
例如,假設您有一個用於編輯文章的表單。文章 ID 可能位於查詢字串中(因此可以透過 $_GET['id'] 取得),但假設您想要更改文章 ID。然後,新的 ID 可能會出現在請求正文中 ($_POST['id'])。好吧,也許這不是最好的例子,但我希望它能說明兩者之間的差異。
$_GET['id']
$_POST['id']
當使用者在表單中輸入資訊並按一下「提交」時,可以透過兩種方式將資訊從瀏覽器傳送到伺服器:在 URL 中,或在 HTTP 請求正文中。
前面範例中使用的 GET 方法將名稱/值對附加到 URL。不幸的是,URL 的長度是有限的,因此此方法僅在參數很少的情況下才有效。如果表單使用大量參數,或者參數包含大量數據,則 URL 可能會被截斷。此外,在 URL 上傳遞的參數在瀏覽器的位址欄位中可見,而不是顯示密碼的最佳位置。
GET 方法的替代方法是 POST 方法。此方法將名稱/值對打包在 HTTP 請求的正文中,這使得 URL 更清晰,並且對表單輸出沒有大小限制。它也更安全。
這不是安全問題。 HTTP 協定將 GET 類型的請求定義為冪等,而 POST 可能有副作用。用簡單的英語來說,這意味著 GET 用於查看某些內容而不更改它,而 POST 用於更改某些內容。例如,搜尋頁面應使用 GET,而更改密碼的表單應使用 POST。
另外,請注意 PHP 有點混淆了這些概念。 POST 請求從查詢字串和請求正文取得輸入。 GET 請求只是從查詢字串取得輸入。所以POST 請求是GET 請求的超集;您可以在POST 請求中使用
$_GET
,甚至可以在$_POST
和$_GET
中使用相同名稱的參數這意味著不同的事情。例如,假設您有一個用於編輯文章的表單。文章 ID 可能位於查詢字串中(因此可以透過
$_GET['id']
取得),但假設您想要更改文章 ID。然後,新的 ID 可能會出現在請求正文中 ($_POST['id']
)。好吧,也許這不是最好的例子,但我希望它能說明兩者之間的差異。