HTTP協定中共定義了八種方法或者叫“動作”來表明對Request-URI指定的資源的不同操作方式,具體介紹如下:
OPTIONS:傳回伺服器針對特定資源所支援的HTTP請求方法。也可以利用向Web伺服器發送'*'的請求來測試伺服器的功能性。
HEAD:向伺服器索要與GET請求相一緻的響應,隻不過響應體将不會被傳回。這一方法可以在不必傳輸整個響應内容的情況下,就可以擷取包含在響應消息頭中的元資訊。
GET:向特定的資源送出請求。
POST:向指定資源送出資料進行處理請求(例如送出表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導緻新的資源的建立和/或已有資源的修改。
PUT:向指定資源位置上傳其最新内容。
DELETE:請求伺服器删除Request-URI所辨別的資源。
TRACE:回顯伺服器收到的請求,主要用于測試或診斷。
CONNECT:HTTP/1.1協定中預留給能夠将連接配接改為管道方式的代理伺服器。
雖然HTTP的請求方式有8種,但是我們在實際應用中常用的也就是get和post,其他請求方式也都可以通過這兩種方式間接的來實作。
HTTP協定中GET、POST和HEAD的介紹
2008-05-10 14:15
GET: 請求指定的頁面資訊,并傳回實體主體。
HEAD: 隻請求頁面的首部。
POST: 請求伺服器接受所指定的文檔作為對所辨別的URI的新的從屬實體。
PUT: 從用戶端向伺服器傳送的資料取代指定的文檔的内容。
DELETE: 請求伺服器删除指定的頁面。
OPTIONS: 允許用戶端檢視伺服器的性能。
TRACE: 請求伺服器在響應中的實體主體部分傳回所得到的内容。
PATCH: 實體中包含一個表,表中說明與該URI所表示的原内容的差別。
MOVE: 請求伺服器将指定的頁面移至另一個網絡位址。
COPY: 請求伺服器将指定的頁面拷貝至另一個網絡位址。
LINK: 請求伺服器建立連結關系。
UNLINK: 斷開連結關系。
WRAPPED: 允許用戶端發送經過封裝的請求。
Extension-mothed:在不改動協定的前提下,可增加另外的方法。
HEAD: 隻請求頁面的首部。
POST: 請求伺服器接受所指定的文檔作為對所辨別的URI的新的從屬實體。
HTTP 定義了與伺服器互動的不同方法,最基本的方法是 GET 和 POST。事實上 GET 适用于多數請求,而保留 POST 僅用于更新站點。根據 HTTP 規範,GET 用于資訊擷取,而且應該是 安全的和幂等的。所謂安全的意味着該操作用于擷取資訊而非修改資訊。換句話說,GET 請求一般不應産生副作用。幂等的意味着對同一 URL 的多個請求應該傳回同樣的結果。完整的定義并不像看起來那樣嚴格。從根本上講,其目标是當使用者打開一個連結時,她可以确信從自身的角度來看沒有改變資源。 比如,新聞站點的頭版不斷更新。雖然第二次請求會傳回不同的一批新聞,該操作仍然被認為是安全的和幂等的,因為它總是傳回目前的新聞。反之亦然。POST 請求就不那麼輕松了。POST 表示可能改變伺服器上的資源的請求。仍然以新聞站點為例,讀者對文章的注解應該通過 POST 請求實作,因為在注解送出之後站點已經不同了(比方說文章下面出現一條注解);
在FORM送出的時候,如果不指定Method,則預設為GET請 求,Form中送出的資料将會附加在url之後,以?分開與url分開。字母數字字元原樣發送,但空格轉換為“+“号,其它符号轉換為%XX,其中XX為 該符号以16進制表示的ASCII(或ISO Latin-1)值。GET請求請送出的資料放置在HTTP請求協定頭中,而POST送出的資料則放在實體資料中;
GET方式送出的資料最多隻能有1024位元組,而POST則沒有此限制。
在表單裡使用”post”和”get”有什麼差別
在Form裡面,可以使用post也可以使用get。它們都是method的合法取值。但是,post和get方法在使用上至少有兩點不同:
1、Get方法通過URL請求來傳遞使用者的輸入。Post方法通過另外的形式。
2、Get方式的送出你需要用Request.QueryString來取得變量的值,而Post方式送出時,你必須通過Request.Form來通路送出的内容。
仔細研究下面的代碼。你可以運作之來感受一下:
代碼
<!--兩個Form隻有Method屬性不同-->
<FORM ACTION=“getpost.asp” METHOD=“get”>
<INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT>
<INPUT TYPE=“submit” VALUE=“Method=Get”></INPUT>
</FORM>
<BR>
<FORM ACTION=“getpost.asp” METHOD=“post”>
<INPUT TYPE=“submit” VALUE=“Method=Post”></INPUT>
<% If Request.QueryString(“Text”) <> ““ Then %>
通過get方法傳遞來的字元串是: “<B><%= Request.QueryString(“Text”) %></B>“<BR>
<% End If %>
<% If Request.Form(“Text”) <> ““ Then %>
通過Post方法傳遞來的字元串是: “<B><%= Request.Form(“Text”) %></B>“<BR>
說明
把上面的代碼儲存為getpost.asp,然後運作,首先測試post方法,這時候,浏覽器的url并沒有什麼變化,傳回的結果是:
通過Post方法傳遞來的字元串是: "Hello World"
然後測試用get方法送出,請注意,浏覽器的url變成了:
http://localhost/general/form/getpost.asp?Text=Hello+World
而傳回的結果是:
通過get方法傳遞來的字元串是: "Hello World"
最後再通過post方法送出,浏覽器的url還是:
而傳回的結果變成:
提示
通過get方法送出資料,可能會帶來安全性的問題。比如一個登陸頁面。當通過get方法送出資料時,使用者名和密碼将出現在URL上。如果:
1、 登陸頁面可以被浏覽器緩存;
2、 其他人可以通路客戶的這台機器。
那麼,别人即可以從浏覽器的曆史記錄中,讀取到此客戶的賬号和密碼。是以,在某些情況下,get方法會帶來嚴重的安全性問題。
建議
在Form中,建議使用post方法。
如果用HEAD方法請求的話,則伺服器傳回的隻是響應标題,而不會傳回被請求的文擋,HEAD方法通用于一些搜尋引擎
--------------------------------------------------------------------------------------------------------------------
比如:
GET /index.html HTTP/1.1
Accept: text/plain /*純ASCII碼文本檔案*/
Accept: text/html /*HTML文本檔案*/
User-Agent:Mozilla/4.5(WinNT)
說明浏覽器使用Get方法請求文檔/index.html。浏覽器則隻允許接收純ASCII碼文本檔案和HTML文本檔案,其使用的引擎是Mozilla/4.5(Netscape)。
當伺服器響應時,其狀态行的資訊為HTTP的版本号,狀态碼,及解釋狀态碼的簡單說明。現将5類狀态碼詳細列出:
① 客戶方錯誤
100 繼續
101 交換協定
② 成功
200 OK
201 已建立
202 接收
203 非認證資訊
204 無内容
205 重置内容
206 部分内容
③ 重定向
300 多路選擇
301 永久轉移
302 暫時轉移
303 參見其它
304 未修改(Not Modified)
305 使用代理
④ 客戶方錯誤
400 錯誤請求(Bad Request)
401 未認證
402 需要付費
403 禁止(Forbidden)
404 未找到(Not Found)
405 方法不允許
406 不接受
407 需要代理認證
408 請求逾時
409 沖突
410 失敗
411 需要長度
412 條件失敗
413 請求實體太大
414 請求URI太長
415 不支援媒體類型
⑤ 伺服器錯誤
500 伺服器内部錯誤
501 未實作(Not Implemented)
502 網關失敗
504 網關逾時
505 HTTP版本不支援
比如:(在《TELNET……》一文中用telnet登陸80端口,相同的方法用在HTTP/1.1中,會發現沒有顯示,下面補充說明之)
telnet www.fudan.edu.cn 80
HEAD / HTTP/1.1
host:www.fudan.edu.cn /*本行為輸入内容*/
HTTP/1.1 501 Method Not Implemented
Date: Web, 01 Nov 2000 07:12:29 GMT /*目前的日期/時間*/
Server: Apache/1.3.12 (Unix) /*Web伺服器資訊*/
Allow: GET, HEAD, OPTION, TRACE /*支援的方法類型*/
Connection: close
Connect-Type: Text/html; charset=iso-8859-1/*連接配接的媒體類型*/
<!DOCTYPE HTML PUBLIG "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>501 Method
Not Implemented</TITLE>
</HEAD><BODY>
<H1>Method Not Implemented</H1>
head to /inde
x.html not supported.<P>
Invalid method in request head / htp/1.1<P>
<HR>
<ADDRESS>
Apache/1.3.12 Server at www.fudan.edu.cn Port 80</ADDRESS>
</BODY></HTML>
關于實體頭部的内容還可以有:
Last Modified :請求文檔的最近修改時間。
Expires :請求文檔的過期時間。
Connect-length:文檔資料的長度。
WWW-authenricate:通知用戶端需要的認證資訊。
Connect-encoding :說明有無使用壓縮技術。
Transfer-encoding :說明采用的編碼變換類型。
随着Internet的發展,下一代的HTTP協定HTTP-ng已經在醞釀之中,它将會提供更好的安全性、更快的速度,其改進要點為:子產品化強、網絡效率高、安全性更好、結構更簡單。