HTML <form> method 屬性

定義和用法

method 屬性規定如何發送表單數據(表單數據將發送到 action 屬性中指定的頁面)。

表單數據可以作為 URL 變量(使用 method="get")或作為 HTTP POST 事務(使用 method="post")發送。

關于 GET 的說明:

  • 將表單數據以名稱/值對的形式附加到 URL 中
  • URL 有長度限制(約 3000 個字符)
  • 切勿使用 GET 發送敏感數據! (將在 URL 中可見)
  • 對于用戶希望將結果加為書簽的表單提交很有用
  • GET 更適合非安全數據,例如 Google 中的查詢字符串

關于 POST 的說明:

  • 在 HTTP 請求的正文中附加表單數據(數據不會顯示在URL中)。
  • 沒有大小限制。
  • 使用 POST 提交的表單無法被加入書簽。

實例

例子 1

使用“get”方法提交表單:

<form action="/action_page.php" method="get">
  <label for="fname">名字:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">姓氏:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <input type="submit" value="提交">
</form>

親自試一試

例子 2

使用“post”方法提交表單:

<form action="/action_page.php" method="post">
  <label for="fname">名字:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">姓氏:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <input type="submit" value="提交">
</form>

親自試一試

語法

<form method="get|post">

屬性值

描述
get 默認。將表單數據以名稱/值對的形式附加到 URL:URL?name=value&name=value。
post 將表單數據作為 HTTP post 事務發送。

詳解 method 屬性

瀏覽器使用 method 屬性設置的方法將表單中的數據傳送給服務器進行處理。共有兩種方法:POST 方法和 GET 方法。

如果采用 POST 方法,瀏覽器將會按照下面兩步來發送數據。首先,瀏覽器將與 action 屬性中指定的表單處理服務器建立聯系,一旦建立連接之后,瀏覽器就會按分段傳輸的方法將數據發送給服務器。

在服務器端,一旦 POST 樣式的應用程序開始執行時,就應該從一個標志位置讀取參數,而一旦讀到參數,在應用程序能夠使用這些表單值以前,必須對這些參數進行解碼。用戶特定的服務器會明確指定應用程序應該如何接受這些參數。

另一種情況是采用 GET 方法,這時瀏覽器會與表單處理服務器建立連接,然后直接在一個傳輸步驟中發送所有的表單數據:瀏覽器會將數據直接附在表單的 action URL 之后。這兩者之間用問號進行分隔。

一般瀏覽器通過上述任何一種方法都可以傳輸表單信息,而有些服務器只接受其中一種方法提供的數據。可以在 <form> 標簽的 method (方法)屬性中指明表單處理服務器要用方法來處理數據,使 POST 還是 GET。

POST 還是 GET?

如果表單處理服務器既支持 POST 方法又支持 GET 方法,那么你該選擇哪種方法呢?下面是有關這方面的一些規律:

  • 如果希望獲得最佳表單傳輸性能,可以采用 GET 方法發送只有少數簡短字段的小表單。
  • 一些服務器操作系統在處理可以立即傳遞給應用程序的命令行參數時,會限制其數目和長度,在這種情況下,對那些有許多字段或是很長的文本域的表單來說,就應該采用 POST 方法來發送。
  • 如果你在編寫服務器端的表單處理應用程序方面經驗不足,應該選擇 GET 方法。如果采用 POST 方法,就要在讀取和解碼方法做些額外的工作,也許這并不很難,但是也許你不太愿意去處理這些問題。
  • 如果安全性是個問題,那么我們建議選用 POST 方法。GET 方法將表單參數直接放在應用程序的 URL 中,這樣網絡窺探者可以很輕松地捕獲它們,還可以從服務器的日志文件中進行摘錄。如果參數中包含了信用卡帳號這樣的敏感信息,就會在不知不覺中危及用戶的安全。而 POST 應用程序就沒有安全方面的漏洞,在將參數作為單獨的事務傳輸給服務器進行處理時,至少還可以采用加密的方法。
  • 如果想在表單之外調用服務器端的應用程序,而且包括向其傳遞參數的過程,就要采用 GET 方法,因為該方法允許把表單這樣的參數包括進來作為 URL 的一部分。而另一方面,使用 POST 樣式的應用程序卻希望在 URL 后還能有一個來自瀏覽器額外的傳輸過程,其中傳輸的內容不能作為傳統 <a> 標簽的內容。

明確傳遞參數

前面的一些建議也可以作為選擇此種方式的一定解釋。假設你有一個很簡單的表單,其中只包含 x 和 y 這兩個參數。在對這些元素的值進行編碼時,它們的形式如下所示:

x=28&y=66

如果表單采用了 method=GET,那么用來引用服務器端應用程序的 URL 將如下所示:

http://www.example.com/example/program?x=28&y=66

在任何時候我們都可以創建一個傳統的 <a> 標簽,用它在調用帶有所需參數值的表單,其形式如下所示:

<a href="http://www.example.com/example/program?x=28&y=66">

唯一的問題是,分隔參數所用的 & 符號也是字符實體中的插入符號。如果在 <a> 標簽的 href 屬性中放入一個 & 符號,瀏覽器就會將其后面的字符替換成相應的字符實體。

為了防止出現這種情況,我們必須用它的實體對等物來替換 & 符號,也就是用 "&#38;" 或 "&amp;" 來替換。替換之后,上面的那個引用服務器應用程序的非表單示例將如下所示:

<a href="http://www.example.com/example/program?x=28&amp;y=66">

由于這樣還是不能在 URL 中使用 & 符號,并且有可能在將來帶來混亂,因此我們鼓勵服務器設置最后也能夠接受用分號作為參數分隔符。您也可以看看自己的服務器文檔,了解服務器是否支持這種功能。

瀏覽器支持

Chrome Edge Firefox Safari Opera
Chrome Edge Firefox Safari Opera
支持 支持 支持 支持 支持