iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 28
0
Modern Web

C#與ASP.Net入門-我要成為工程師!!系列 第 28

Day28-[ASP.NET][C#] GET跟POST的差異(ASP.NET Web Form)

了解Request後,那它是怎麼傳遞資料的呢?

HTTP定義Request資料傳遞方式有GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH九種方法。ASP.NET的form使用的兩種方法為GETPOST。會寫在form這個tag的method屬性裡

 <form id="form1" runat="server" method="">
 </form>

以下會分別介紹GET跟POST、它們的差異以及postback到底是什麼

==============================================================

GET

user輸入url-->瀏覽器透過url跟server要資源->server回傳相對應的內容

一般用於獲取/查詢資源及資訊。為網頁畫面傳送預設值,一個網頁第一次載入是用GET

GET有以下幾個特色:

  • 不會對傳遞的數據進行任何修改
  • 冪等的,相同的請求所返回的結果是相同的
  • 將要傳送的資料以Query String(一種Key/Vaule的編碼方式)加在我們要寄送的網址(URL)後面,參數顯示在url上的"?"之後,參數間用&分開,如下方

http ://yoyoyo/index.htm?參數1=值1&參數2=值2

如果資料是英文字母/數位,原樣發送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密。

<範例>
先在aspx頁面輸入以下,放兩個輸入格,用sumbit送出資料(submit讀的是name的值)

<form method= "get" >
    <input name="Getinput" />
    <input name="Getinput2" />
    <input type="submit">
</form>

將值輸入後按提交
https://ithelp.ithome.com.tw/upload/images/20190929/20120055adg2aPg34V.png

GET的內容會show在url上,輸入什麼就傳什麼
https://ithelp.ithome.com.tw/upload/images/20190929/20120055Osy1Tr8tCR.png

那如果加上runat="server"

<form method= "get" runat="server">
    <input name="Getinput" />
    <input name="Getinput2" />
    <input type="submit">
</form>

可以發現提交之後,runat="server"也送了用來跟.aspx.cs溝通的隱藏欄位(viewstate的內容)出去,後面依然跟著跟上面一樣的參數
https://ithelp.ithome.com.tw/upload/images/20190929/20120055OE3RG59d8N.png

送出後完整的url:https ://localhost:44344/shareObject.aspx?__VIEWSTATE=QBeK6Fha7Fwc%2BtpHj6Di7AoKkuRKodY5%2FfuxZOPwY9cHwpxCcxbjYND3ELeZah3od5GLtozZsBfnKTRZXVHI7PF6WPTL0nK%2FhEpLY2%2FwSXg%3D&__VIEWSTATEGENERATOR=96C0797A&Getinput=123&Getinput2=456

此方法
優點:url上就可以看到到底傳了什麼,獲取參數也可以用上一篇提到的request方法取得
缺點:也是url上就可以看到到底傳了什麼,被看光光的概念XD。另外由於各瀏覽器對於url有長度上的限制,可以傳遞的資料內容可能受限

==============================================================

POST

user在form裡輸入資料-->form將資料submit出去,post給server端->server回傳相對應的內容

一般用於更新資源及資訊。為表單Form傳送預設值

特色:

  • 提交的資料是放在傳給HTTP的封包裡,故位址欄不會改變
  • POST提交後結果會回傳一個全新的頁面

一樣來輸入相同的程式碼,只是用預設值post

<form >
    <input name="Getinput" />
    <input name="Getinput2" />
    <input type="submit">
</form>

按了提交之後網址也不會變喔~
https://ithelp.ithome.com.tw/upload/images/20190929/20120055BRt4OOkwA8.png

此方法
優點:不會受限瀏覽器對url的限制減少資料的傳輸量
缺點:沒辦法使用url獲取資料

==============================================================

GET與POST差異比較

簡單做個比較表

GET POST
網址差異 網址會帶有 HTML Form 表單的參數與資料 資料傳遞時,網址並不會改變
資料傳遞量 由於是透過 URL 帶資料,所以會因不同瀏覽器有不同長度限制 不透過 URL 帶參數,所以不受限於 URL 長度限制
資料展現方式 表單參數與填寫內容可在 URL 看到 透過 HTTP Request 方式,故參數與填寫內容不會顯示於 URL。資料會在封包裡
與form關係 不一定form才能用 需搭配form才能使用

至於安全性我覺得兩者並沒有差別,就算GET方法會顯示在url上,但若是針對url的內容進行加密,其實也沒有因為這樣就比POST不安全。

==============================================================

參考資料

淺談HTTP Method:表單中的GET與POST有什麼差別?
HTML表單中GET與POST的用法差異
91之ASP.NET由淺入深不負責講座Day1-Get/Post


上一篇
Day27-[ASP.NET][C#] Request 物件 vs Response物件
下一篇
Day29-[ASP.NET][C#]PostBack-為什麼前輩都用IsPostBack當起手式?
系列文
C#與ASP.Net入門-我要成為工程師!!31

1 則留言

0
小朱
iT邦新手 4 級 ‧ 2019-09-29 20:19:56

GET和POST多半是會混合使用,GET用來指示系統的某些參數 (例如指定動作或不需考慮安全性的資料,例如搜尋關鍵字),資料則由POST攜帶 (例如ViewState, Hidden Field 之類的,長度多半都較長), 時預設的動詞是POST。

另外,撇開Web Form不談的話,其實HTTP的資料傳送樣態很多 (例如本體用JSON來傳),再考慮REST API的話,動詞本身又會決定動作的類型。

感謝小朱大大補充!

我要留言

立即登入留言