[HTTP]Http GET、POST Method

  • 141902
  • 0
  • HTTP
  • 2011-05-29

Http(Hypertext Transfer Protocol)是一種通訊協定,用於網頁發出請求(Request)給伺服器,伺服器將要Render的資料回傳(Response)給網頁瀏覽器使用,Http訊息通常是透過80 port或是443 port(Secure http)往返網頁瀏覽器與伺服器之間。
GET Method: 在http通訊協定中,有兩種方法(HTTP methods)可以將資料送到Web Server端,分別是GET和POST,當使用GET的方法時,會將表單資訊附加在URL上並作為QueryString的一部分,QueryString是一種key/value的組合,從問號「?」開始,每一組值都是用「&」隔開,如下圖

HTTP

    Http(Hypertext Transfer Protocol)是一種通訊協定,用於網頁發出請求(Request)給伺服器,伺服器將要Render的資料回傳(Response)給網頁瀏覽器使用,Http訊息通常是透過80 port或是443 port(Secure http)往返網頁瀏覽器與伺服器之間。

HTTPDemo

    使用者在瀏覽器網址輸入URL(Uniform Resource Locator)、或是到google搜尋資料,在網頁上輸入想要搜尋的資訊,按下搜尋按鈕後,瀏覽器會發送命令(command)資訊到Web伺服器端,這裡面包含了請求的資源,如 QueryString參數、URL、要求路徑..等等資訊。發送一個請求(就是ASP.NET Application 概述提到的Request)到IIS,發送的訊息內容跟下面內容相似

GET  /test.aspx  HTTP/1.1
Host: www.google.com

Line 1:

  • GET:Http Method(告訴Web Server網頁要執行方法),一共分為9種(註一),常用的Get與Post方法包含在裡面
  • /test.aspx:這次要取回的URL網頁(目標網頁)
  • HTTP/1.1:通訊協定HTTP的版本

Line 2:

  • Host:Web Server 所使用的Host位置

註一:Http Method分為9種,分別為OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT、DEBUG,詳細可以參考Request Methods

     當Web Server處理完成瀏覽器發出的請求(Request)後會回傳以Response資訊(以文字為基礎)給使用者的瀏覽器,回傳資訊會類似下面文字

HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
Content-Type: text/html
Content-Length: 38
<html><body>Hello, world.</body><html>

Line 1:

  • HTTP/1.1:通訊協定HTTP的版本
  • 200:狀態代碼(Status Coe),為3位數組合
  • OK:解釋狀態代碼原因(Status Code Reason),HTTP/1.1版本中用很簡短文字來描述狀態代碼,200 OK 代表本次請求Web Server回應正常。

更詳細的可以參考:Status Code Definitions

Line 2:

  • 指出Web服務器的類型

Line 3:

  • MIME(Multipurpose Internet Mail Extensions)內容類型,MIME是由[type / subtype;種類/詳細類型]所組成;通常將網頁轉為 Word、Excel文件,就是修改這個屬性。

Line 4:

  • 內容長度

Line 5:

  • Content(表單內容)

 

GET

    在http通訊協定中,有兩種方法(HTTP methods)可以將資料送到Web Server端,分別是GET和POST,當使用GET的方法時,會將表單資訊附加在URL上並作為QueryString的一部分,QueryString是一種key/value的組合,從問號「?」開始,每一組值都是用「&」隔開,如下圖

image

    當使用GET方法將資料送到Web Server時,可以透過瀏覽器的網址看到完整的URL和QueryString,這是一種不安全的方法,具有高風險性。有心的人可以透過操控QueryString字串的方式來取得或破壞資料庫的資料,另一個缺點是有長度的限制,當使用MS IE和IIS的話,QueryString長度不能高過1,024個字元。舉例來說(有圖有真相),到yahoo搜尋輸入「hello world」,按下搜尋,此時我們可以透過httpwatch軟體來查看Get 方法Http Request封包的內容

GETDemo

從以上圖可以得知:

  1. HTTP Method 方法為 GET(廢話...大家又不是瞎子 XD),POST Data為空白
  2. 網址變http://tw.search.yahoo.com/search?p=hello+world&fr=yfp&ei=utf-8&v=0,透過QueryString方式傳遞資料給Web Server。
  3. 從網址列就可以看出表單傳送的資料(QueryString),假設是傳送機密性資訊的話,不就被看光光了,這也是前面所提到安全性的問題。

 

POST

    POST方法是將要傳送的資訊放在message-body中,如下圖

image

    使用POST方法就不用擔心資料大小的限制,可以防止使用者操作瀏覽器網址,表單的資料被隱藏在message-body中,因此,在大多數的情況下,使用POST方法將表單資料傳到Web Server端是更有效的方法。同樣的,我們也可以透過httpwatch觀察POST 方法Http Request封包的內容

POSTDemo

從以上圖可以得知:

  1. HTTP Method 方法為 POST
  2. POST Data資料(value)不為空白;透過POST Data方式傳遞資料給Web Server。

 

比較

    透過表格的方式,簡單比較一下「GET」和「POST」兩者的差異

Comparison

從表中可以看出來,GET與POST方法各有優點和缺點

  • GET方法執行速度比較快但是安全性較差
  • POST方法速度較慢(因為要將Form的資料一送回Web Server),安全性較GET高

沒辦法說哪種方法最好或最壞,但可以透過不同的應用或需求使用較為適合的方法;當單純的呈現網頁資料,使用GET方法;當網頁上的資料是動態產生控件的話,就建議使用POST方法;個人淺見,有錯請各位給予指教 :p

 

參考

此篇文章是上網查詢自己整理的結果,如果內容有錯誤的地方,麻煩各位高手給予小弟指導

如果覺得此篇文章不錯,請幫忙點選「我要推薦」;讓我有持續努力的動力,謝謝 :D

HTTP/1.1: Method Definitions

淺談 HTTP Method:表單中的 GET 與 POST 有什麼差別?

[ASP.NET]HTTP GET與POST的差異

GET、POST與cache的關係

Compare GET and POST Methods of HTML Form