[關於ASP.NET的23事] Lession 2 超文本傳輸協定的基礎
今天分享的是ASP.NET的基礎中的基礎,就是Http的協定
Http的協定是用來供瀏覽器與網頁伺服器之間相互請求溝通協定
Http通常都是透過80的Port,不然就是Port 443的Https(Secure HTTP)
每當使用者在瀏覽器上打入了URL,瀏覽器就會將文字的命令傳送給網頁伺服器
傳的內容如下:
GET /default.aspx HTTP/1.1
HOST: www.MyWebSite.com 註:亂命名的
就是這樣,第一行字串的開頭會是一個動詞(本例中是一個GET),以及HTTP的版本1.1
這個GET方法會被網頁伺服器執行,並取得default.aspx的網頁。
第二行說明了Web Server所寄宿網站的位置,畢竟一個網頁伺服器上可能有多個網站在營運
網頁伺服器會因為這個字串將請求轉送到適當的站台去。
當然還有很多的動詞可以被使用,以下簡單表列:
OPTIONS動詞:客戶端可以使用這個動詞,來取得網頁伺服器到底支援了哪些動詞。
必竟頻寬有限,若不支援的動詞還是不要一直傳送請求過去。
GET動詞:從網頁伺服器上取得一個URL,通常可能是一個網頁檔案(/test.html),也可以是一個目錄
以網頁伺服器來說,請求一個目錄有可能會回傳的是一個首頁的網頁(Index.html)。
HEAD動詞:取得資源的Meta資訊,不會回傳實際的資源,通常這類的資訊也會在GET動詞時被回應。
POST動詞:將資料送至網頁伺服器進行處理。通常是一個表單進行了送出(Submit),會將資料連同
請求一併傳送出去。
PUT動詞:允許客戶端放置資源到指定伺服器的URL,伺服器會取得請求的資訊,建立該檔案(在URL)。
若檔案存在而且沒有設定Lock的話,就會被覆寫掉。
DELETE動詞:用來指定刪除特定URL下的資源,必須有寫入權限。
TRACE動詞:被用來測試或是診斷請求的問題,讓客戶看的到請求的串連行為資訊。
CONNECT動詞:指定透過Proxy來動態切換換定,例如SSL的協定。
DEBUG動詞:沒有被定義在HTTP1.1版中,但是有定義在ASP.NET的除錯模式,這個是用在ASP.NET的虛擬
頁伺服器除錯時,讓偵錯功能可以被觸發(綁在Visual Studio中)。
每次請求後,網頁伺服器都會有所回應,在ASP.NET中,是被包覆在一個稱為Response的物件。
我們可以透過這個物件來設定Cookies、快取,或是設定頁面過期的時機點,當一個伺服器回應了一個請求後。
通常也是透過HTTP的文字格式來回傳給瀏覽器,如下:
HTTP/1.1 200 OK
Server : Microsfot-IIS/6.0
Content-Type: text/html
Content-Length:38
<html><body>Hello, Huang IP.</body></html>
通常我們可以看到第一行的那個數字就是所謂的Status Code,說明請求的處理狀況為何,常見的如下:
1xx:請求收到,持續處理
常見的有100(Continune)
2xx:成功;行為被接收到、理解與接受
常見的有200(OK)
3xx:轉頁命令,接續下一個請求的事件
常見的有302(Found)
4xx:客戶端錯誤,例如語法有問題或是伺服器無法瞭解如何滿足請求。
常見的有403(Forbidden)、404(Not Found)
5xx:伺服器錯誤,伺服器無法完成請求。
常見的有500(Internal Server Error)、501(Not Implemented)
HTTP還有標籤,包含了MIME,MIME是指Multipurpose Internet Mail Extensions:通常分為下列幾種,代表的是Http回傳的格式
Text:通常就是一個HTML網頁
Image:影像的資料,通常都要有顯示的軟體
Audio:通常要具備支援播放的裝置
Video:預設是mpeg檔案
Application:其他類型的資料,通常是一些非直譯型的二進位資料
最後來聊一下如何將資料傳送給網頁伺服器進行處理,先不論WebForm是什麼
在HTML中有一個Tag叫作<Form></Form>(表單),包在Form標籤下的所有<input>類型(可以包含資料,可收集使用者輸入資料的標籤)
只要透過一個Submit類型按鈕觸發,瀏覽器就會將Form中的表單欄位,透過指定的方法將資料送到網頁伺服器中。
<Form method="POST" action = "Save.aspx">
<Input type="text" name="Id">
<Input type="text" name="PhoneNumber">
<input type="submit" value="Save Data">
</Form>
上例中,表單的資訊會透過"POST"的方法,將資料傳送給指定的網頁
一般傳送的方法有兩種,一種是GET、一種是POST
GET方法是會將資料透過QueryString的方式,將表單的欄位與值,綁在URL的後面(透過?),不同的欄位透過&符號分隔:
在HTTP的請求範例如下:
GET /Save.aspx?Id=123&PhoneNumber=0978123456 HTTP/1.1
HOST:www.PinWeb.com
因此,在瀏覽器上的網址列,我們就可以看到整個表單的資訊都會被顯示出來
一來這個方法不適合敏感資料,通常建議作為傳送查詢的Key值(例如:BookID),不然就是要將資料加密
二來就是會有長度的限制,IE對上IIS的話,最常就是1024個字元了
所以一般我們都會透過另一個方法:POST
其實從POST的請求也會綁資料,只是他不會顯示在URL中,而是透過隱藏在HTTP訊息Body之中(因此至少有了10MB以上的可能)
長的像是這樣:
POST /Save.aspx HTTP/1.1
HOST: www.PinWeb.com
Id=123&PhoneNumber=0978123456
而ASP.NET預設就是透過這個方法,這個方法對於資料的傳送更為的安全與普遍
而WebForm就是透過這個機制,將整個頁面的資料”PostBack”給伺服器
所以Page物件中也有一個屬性叫作IsPostBack,正是用來判斷頁面是首次請求,還是因為觸發了PostBack事件,將資料送回給伺服器端。
書籍的資料來源:MCTS for ASP.NET