淺談HTML表單(一):表單提交原理

淺談HTML表單(一):表單提交原理

來自專欄 Miyas 技術學習小記

一、html表單

1、什麼是表單

能夠去輸入用戶信息的一個單子。和我們平時填寫的紙質表單一樣,在HTML頁面上,也有表單是用於搜集不同類型的用戶信息輸入

2、作用

用於收集已收集的信息,提交你網站的後台(或者伺服器)。

HTML表單是一個包含表單元素的區域,表單元素是允許用戶在表單中(表單元素包含如:文本域、下拉列表、單選框、複選框等)輸入信息的元素


二、寫表單

1、表單提交原理

一般表單有登錄名、密碼,<form></form>、<input>,表單所有信息用<form></form>包裹。用<form>包裹所有<input>輸入框,當點擊提交後,將會把<form>所包裹得所有<input>輸入框的信息提交給後台的一個地址上。

2、寫表單

(1)表單內的主要標籤屬性:

A、

<form></form>

B、

<form action="/a123" method="get">

action:把數據提交到後台的地址,如action="/a123",即提交到當前域名下的/a123

method:提交數據的方式

(2)demo:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <div class="login"> <form action="/a123" method="get"> <div class="sex"> <input type="text" name="sex1"> </div> <div class="username"> <input type="text" name="username1"> </div> <div class="password"> <input type="password" name="password1"> </div> <div class="submit"> <button>提交</button> </div> </form> </div></body></html>

(2)html文件用瀏覽器打開頁面

當寫出登錄名、密碼、提交代碼後(之後加上性別),

以get形式點擊提交,頁面url顯示input輸入的相應的內容:

註:點擊提交代表向伺服器發送了一個請求,這個文件是通過get方式進行表單收集

假如,將以下代碼放置在<form></form>標籤之外,

<div> <div class="sex"> <input type="text" name="sex1"> </div> <form>..... </form> </div>

以get形式提交的頁面url也不會顯示相應的內容:

3、終端上操作

即本地終端開啟伺服器,以服務端的方式打開頁面

(1)命令行開啟靜態伺服器,並打開頁面:

因為之前我已經安裝nodejs,用npm安裝了http-server這個伺服器,所以可以執行以下代碼直接打開這個靜態伺服器:

$ http-server

代碼執行之後,輸入相應的url出現的頁面,兩步驟之後的示意圖:

註:以下情況給沒有安裝nodejs 的人看的(安裝了就可以不看)

假如有人之前沒安裝nodejs,就不能用npm命令去開啟一個靜態伺服器,所以可以先看看我這篇:

miya Wang:淺談命令行(二):安裝靜態伺服器(涉及nodejs和npm的使用)?

zhuanlan.zhihu.com圖標

看完之後可以下載nodejs,在終端執行以下代碼:

$ sudo npm install -g http-server$ http-server

這樣之後就開啟了一個靜態伺服器,就可以用裡面的url打開相應的html文件

(2)輸入相應信息之後,出現:

(3)頁面右鍵——檢查,重新輸入表單信息,點擊提交

出現頁面相對應的html文件——form.html的請求,先貼上我操作後出現的頁面:

  • 請求的地址:

Request URL: 127.0.0.1:8080/a123?

  • 請求的類型:

Request Method: GET

  • 請求的參數:

username1: wxq393

password1: 12345

(4)兩種請求類型:get和post

A、get請求

即當form.html中method="get"時,頁面上點擊「提交」時,就會將form.html展現的信息進行組裝,以view的形式去組合成這個url地址:127.0.0.1:8080/a123?,向這個地址發送請求。

get請求,本質上就是url的拼接,把你的參數拼接在一起組成一個新的url

註:username所得的參數是屬於input標籤中的name屬性

B、post請求

關於post類型發送請求:由於我的伺服器http-server,是個靜態文件伺服器,不支持post請求。

可以看老司機的演示:

post請求演示

post的請求類型得到的url地址更乾淨,更安全。


三、post和get的區別

1、method提供兩種提交方式:

一種是get方式向後台發送請求,提交數據;另一種是post方式向後台發送請求,提交數據

2、區別

(1)從安全性上,二者表象不同,get把提交的數據url可以看到,會展現在瀏覽器歷史記錄中,安全性不好;但是post看不到,安全性好。

(2)從提交數據量上,get最多提交1k數據,瀏覽器上的url地址框有字元長度限制;post理論上無限制,受伺服器限制。

(3)從原理上,get 是拼接 url, post 是放入http 請求體中。

3、應用場景(怎麼合理兩種方式傳遞數據?)

註:在實際應用上,get 重在 "得到", post 重在"傳遞"

即假如向後台查詢一篇論文,請求數據,請求為「得到」,用get方式請求數據;向後台「傳遞」數據,寫了文章之後傳遞至後台,通常是「傳遞完成」的狀態進行提示,用post方式請求數據。


四、表單元素

吶,早說了,w3c是個好東西????

HTML 表單元素?

www.w3school.com.cn


推薦閱讀:

設計對用戶友好表單的8個要點
哪一刻,你意識到平窮限制了你的想像
淺談HTML表單(二):表單元素
魔方網表標準模塊,1小時做出業務應用

TAG:表單 | URL | 請求數據 |