CynthiaChuang

了解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到底是什麼

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

01. 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>

將值輸入後按提交

GET的內容會show在url上,輸入什麼就傳什麼

那如果加上runat="server"

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

可以發現提交之後,runat="server"也送了用來跟.aspx.cs溝通的隱藏欄位(viewstate的內容)出去,後面依然跟著跟上面一樣的參數

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

此方法

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

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

02. POST

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

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

特色:

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

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

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

按了提交之後網址也不會變喔~

此方法

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

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

03. GET與POST差異比較

簡單做個比較表

GETPOST
網址差異網址會帶有 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

原文出處: [ASP.NET][C#] GET跟POST的差異(ASP.NET Web Form)