[關於ASP.NET的23事] Lession 2 超文本傳輸協定的基礎(HTTP Basic)

[關於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