form_action: 表單數據提交到此頁面
下面的表單擁有兩個輸入字段以及一個提交按鈕,當提交表單時,表單數據會提交到名為 "form_action.asp" 的頁面:
<form action="form_action.asp" method="get">
<p>First name: <input type="text" name="fname" /></p>
<p>Last name: <input type="text" name="lname" /></p>
<input type="submit" value="Submit" />
</form>
form_mothod:
GET和POST本質上就是TCP鏈接,並無差別。但是由於HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。
GET和POST還有一個重大區別,簡單的說:
GET產生一個TCP數據包;POST產生兩個TCP數據包。(GET只送一次,POST送兩次第一次打招呼,第二次再送,具體情況要看網絡環境的快慢)
並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。
1.安全性: get 暴露在url 中,歷史紀錄中 post > get
2.編碼:
get只能向服務器發送ASCII字符,而post則可以發送ISO 10646中的字符
get和post對應的enctype屬性有區別:
application/x-www-form-urlencoded
在發送前編碼所有字符(默認)
multipart/form-data
不對字符編碼。 在使用包含文件上傳控件的表單時,必須使用該值。
3.提交數據的長度
IE將請求的URL長度限制為2083個字符,從而限制了get提交的數據長度,如果URL超出了這個限制,提交form時IE不會有任何反映。
4.緩存
由於一個get得到的結果直接對應到一個URL,所以get的結果頁面有可能被瀏覽器緩存,而post一般不能
5.引用和SEO
最本質的區別
get是用來從服務器上獲得數據,而post是用來向服務器上傳遞數據
6.什么時候選擇get 或者post
若符合下列任一情況,則用post方法:
a.請求的結果有持續性的副作用,例如:數據庫內添加新的數據行。
b.若使用get方法,則表單上收集的數據可能讓URL過長。
c.要傳送的數據不是采用ASCII編碼。
若符合下列任一情況,則用get方法:
a.請求是為了查找資源,html表單數據僅用來搜索。
b.請求結果無持續性的副作用。
c.收集的數據及html表單內的輸入字段名稱的總長不超過1024個字符。
7.瀏覽器差異
form_enctype:
form表單的enctype設置為multipart/form-data后,表單中除了文件后台能拿到,其他值后台都拿不到。
2.將表單中的數據變成二進制數據進行上傳,所以這時如果用request是無法直接獲取到相應表單的值的
