ASP.NET的HtmlForm控件學習及Post與Get的區(qū)別概述
一、前言
1、了解HTTP(hypertext transport protocol)超文本傳輸協(xié)議
它是一種分布式,協(xié)作式,超媒體系統(tǒng)應用之間的通信協(xié)議。是萬維網(wǎng)(world wide web)交換信息的基礎。它以HTML文檔從web服務器傳到web瀏覽器的方式進行的,如下圖解:
HTTP工作在TCP/IP協(xié)議體系中的TCP協(xié)議上。我們可以引出TCP/IP協(xié)議層級模型,如下圖:
HTTP請求的方法如下:
(1).OPTIONS:返回服務器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務器發(fā)送'*'的請求來測試服務器的功能性。
(2).HEAD:向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內(nèi)容的情況下,就可以獲取包含在響應消息頭中的元信息。
(3).GET:向特定的資源發(fā)出請求。注意:GET方法不應當被用于產(chǎn)生“副作用”的操作中,例如在web app.中。其中一個原因是GET可能會被網(wǎng)絡蜘蛛等隨意訪問。
(4).POST:向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
(5).PUT:向指定資源位置上傳其最新內(nèi)容。
(6).DELETE: 請求服務器刪除Request-URI所標識的資源。
(7).TRACK: 回顯服務器收到的請求,主要用于測試或診斷。
2.表單提交原理
這里引述了大牛們的總結:
(1).表單提交時表單內(nèi)容會被瀏覽器封裝為HTTP請求報,里面包含了所有表單元素的name屬性值和value屬性的值,形式為name=value。
(2).該HTTP請求報被webserver獲取后會被解析并封裝成一個Request對象,Request對象里有一個Parameters集合專門用來存放所有的表單元素名值對。
(3).每個表單元素名值對被封裝成一個Parameter,而Parameter其實就是一個Map,所以你的Servlet里就可以用request.getParameter(name)獲取其value了。
既然大牛們都說的很清楚了,那么我們還需要清除的是表單靠什么進行提交的,在這里表單標簽有個很重要的屬性就是enctype,它設置以何種編碼方式提交表單數(shù)據(jù)。有以下三種:
(1).application/x-www-form-urlencoded:這是默認的編碼方式,通過Value值的方式進行數(shù)據(jù)處理 [這個我還是模糊的](2).multipart/form-data:是以二進制流的方式來處理表單數(shù)據(jù)
(3).text/plain:當表單的action屬性值為mailto:URL的形式時使用,多用于直接通過表單發(fā)送郵件
二、HtmlForm控件
1.HtmlForm 控件用于控制 <form> 元素,主要屬性如下:
屬性 | 描述 |
---|---|
Action |
URL,定義當提交表單時把數(shù)據(jù)送往何處。注釋:該屬性總是設置為頁面自身的 URL! |
Attributes | 返回該元素的所有屬性名稱和值對。 |
Disabled | 布爾值,指示是否禁用該控件。默認是 false。 |
EncType | 用來編碼表單內(nèi)容的 MIME 類型。 |
id | 控件的唯一 id。 |
InnerHtml |
設置或返回該 HTML 元素的開始標簽和結束標簽之間的內(nèi)容。特殊字符不會被自動轉換為 HTML 實體。 |
InnerText |
設置或返回該 HTML 元素的開始標簽和結束標簽之間的所有文本。特殊字符會被自動轉換為 HTML 實體。 |
Method | 表單向服務器傳送數(shù)據(jù)的方式。合法的值是 "post" 和 "get"。默認是 "post"。 |
Name | 表單的名稱。 |
runat | 規(guī)定該控件是一個服務器控件。必須被設置為 "server"。 |
Style | 設置或返回被應用到控件的 CSS 屬性。 |
TagName | 返回元素的標簽名。 |
Target | 加載 URL 的目標窗口。 |
Visible | 布爾值,指示該控件是否可見。 |
Method:Post / Get;其中的差別是Get表示由瀏覽器主動上傳資料至Server 端,是立即傳送,其執(zhí)行效率快但是傳送的數(shù)據(jù)量也不能太大;而Post表示由服務器來抓取數(shù)據(jù),雖然不是那么立即,但是可傳送的數(shù)據(jù)量則沒有什么限制。
Action:要提交數(shù)據(jù)的頁面,即數(shù)據(jù)要傳送至哪個網(wǎng)址。
2.Post與Get的區(qū)別:
http://jb51.net/web/72554.html
Form提供了兩種數(shù)據(jù)傳輸?shù)姆绞健猤et和post。雖然它們都是數(shù)據(jù)的提交方式,但是在實際傳輸時確有很大的不同,并且可能會對數(shù)據(jù)產(chǎn)生嚴重的影響。雖然為了方便的得到變量值,Web容器已經(jīng)屏蔽了二者的一些差異,但是了解二者的差異在以后的編程也會很有幫助的。
Form中的get和post方法,在數(shù)據(jù)傳輸過程中分別對應了HTTP協(xié)議中的GET和POST方法。二者主要區(qū)別如下:
1、Get是用來從服務器上獲得數(shù)據(jù),而Post是用來向服務器上傳遞數(shù)據(jù)。
2、Get將表單中數(shù)據(jù)的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用“?”連接,而各個變量之間使用“&”連接;Post是將表單中的數(shù)據(jù)放在form的數(shù)據(jù)體中,按照變量和值相對應的方式,傳遞到action所指向URL。
3、Get是不安全的,因為在傳輸過程,數(shù)據(jù)被放在請求的URL中,而如今現(xiàn)有的很多服務器、代理服務器或者用戶代理都會將請求URL記錄到日志文件中,然后放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數(shù)據(jù),一些系統(tǒng)內(nèi)部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
4、Get傳輸?shù)臄?shù)據(jù)量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數(shù)據(jù),所以在上傳文件只能使用Post(當然還有一個原因,將在后面的提到)。
5、Get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符;而Post支持整個ISO10646字符集。
6、Get是Form的默認方法。
使用Post傳輸?shù)臄?shù)據(jù),可以通過設置編碼的方式正確轉化中文;而Get傳輸?shù)臄?shù)據(jù)卻沒有變化。在以后的程序中,我們一定要注意這一點。
1、Get 方法通過 URL 請求來傳遞用戶的數(shù)據(jù),將表單內(nèi)各字段名稱與其內(nèi)容,以成對的字符串連接,置于 action 屬性所指程序的 url 后,如http://www.mdm.com/test.asp?name=asd&password=sad,數(shù)據(jù)都會直接顯示在 url 上,就像用戶點擊一個鏈接一樣;Post 方法通過 HTTP post 機制,將表單內(nèi)各字段名稱與其內(nèi)容放置在 HTML 表頭(header)內(nèi)一起傳送給服務器端交由 action 屬性能所指的程序處理,該程序會通過標準輸入(stdin)方式,將表單的數(shù)據(jù)讀出并加以處理2、 Get 方式需要使用 Request.QueryString 來取得變量的值;而 Post 方式通過 Request.Form 來訪問提交的內(nèi)容
3、Get 方式傳輸?shù)臄?shù)據(jù)量非常小,一般限制在 2 KB 左右,但是執(zhí)行效率卻比 Post 方法好;而 Post 方式傳遞的數(shù)據(jù)量相對較大,它是等待服務器來讀取數(shù)據(jù),不過也有字節(jié)限制,這是為了避免對服務器用大量數(shù)據(jù)進行惡意攻擊,根據(jù)微軟方面的說法,微軟對用 Request.Form() 可接收的最大數(shù)據(jù)有限制,IIS 4 中為 80 KB 字節(jié),IIS 5 中為 100 KB 字節(jié)建議:除非你肯定你提交的數(shù)據(jù)可以一次性提交,否則請盡量用 Post 方法
4、Get 方式提交數(shù)據(jù),會帶來安全問題,比如一個登陸頁面,通過 Get 方式提交數(shù)據(jù)時,用戶名和密碼將出現(xiàn)在 URL 上,如果頁面可以被緩存或者其他人可以訪問客戶這臺機器,就可以從歷史記錄獲得該用戶的帳號和密碼,所以表單提交建議使用 Post 方法;Post 方法提交的表單頁面常見的問題是,該頁面如果刷新的時候,會彈出一個對話框建議:出于安全性考慮,建議最好使用 Post 提交數(shù)據(jù)
關于ASP.NET的HtmlForm 控件這點弄明白之后,那么在后期的ASP.NET上傳控件、Request獲取窗體變量就能很容易的去理解了。再者,關于Get與Post的區(qū)別,甚是關鍵,去年面試的時候就因為這點沒有很好地回答上而被潛回,看來以后還是要把基礎的東西弄熟透、打扎實才能為后面的道路順利開展工作。
相關文章
Web系統(tǒng)通過EXE文件實現(xiàn)讀取客戶電腦MAC等硬件信息且兼容非IE瀏覽器
我們在實際Web應用中,可能會遇到“需要限定特定的電腦或用戶才能使用系統(tǒng)”的問題。2014-08-08ASP.NET Mvc開發(fā)之刪除修改數(shù)據(jù)
這篇文章主要介紹了ASP.NET Mvc開發(fā)中的刪除修改數(shù)據(jù)功能,感興趣的小伙伴們可以參考一下2016-03-03.NET使用YARP通過編碼方式配置域名轉發(fā)實現(xiàn)反向代理
這篇文章介紹了.NET使用YARP通過編碼方式配置域名轉發(fā)實現(xiàn)反向代理的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09基于MVC5中的Model層開發(fā)數(shù)據(jù)注解
下面小編就為大家分享一篇基于MVC5中的Model層開發(fā)數(shù)據(jù)注解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12