HTTP協議之方法

HTTP 是Web協議集中的重要協議,它是從客戶機/服務器模型發展起來的。客戶機/服務器是運行一對相互通信的程序,客戶與服務器連接時,首先,向服務器提出請求,服務器根據客戶的請求,完成處理並給出響應。瀏覽器就是與Web服務器產生連接的客戶端程序,它的端口爲TCP的80端口,。瀏覽器與Web服務器之間所遵循的協議就是HTTP。
  筆者曾在第六期的《用telnet登陸非23端口》一文中寫過關於用telnet訪問http/1.0,恰逢有朋友問起用netants下載文件時發生的一個關於http/0.9問題,打開IE5.0選擇工具、Internet選項、高級,可以發現HTTP /1.1的設置,使用HTTP/1.1。所以,這裏想向大家詳細介紹關於HTTP協議的發展歷程,以便於大家更好的運用HTTP訪問Internet。
  HTTP的早期版本爲HTTP/0.9,它適用於各種數據信息的簡潔快速協議,但是其遠不能滿足日益發展各種應用的需要。但HTTP/0.9作爲 HTTP協議具有典型的無狀態性:每個事務都是獨立進行處理的,當一個事務開始就在客戶與服務器之間建立一個連接,當事務結束時就釋放這個連接。 HTTP/0.9包含Simple-Request&Simple-Responsed的報文結構。但是客戶無法使用內容協商,所以服務器也無法返回實體的媒體類型。
  1982年,Tim Berners-Lee提出了HTTP/1.0,在此後的不斷豐富和發展中,HTTP/1.0成爲最重要的面向事務的應用層協議。該協議對每一次請求/響應,建立並拆除一次連接。其特點是簡單、易於管理,所以它符合了大家的需要,得到了廣泛的應用。其缺點是仍會發生下列問題:對用戶請求響應慢、網絡擁塞嚴重、安全性等。
  1997年形成的HTTP/1.1,也就是現在普遍使用的協議,在持續連接操作機制中實現流水方式,即客戶端需要對同一服務器發出多個請求時,其實現在多數的網頁都是有多部分組成(比如多張圖片),可用流水線方式加快速度,流水機制就是指連續發出多個請求並等到這些請求發送完畢,再等待響應。這樣就大大節省了單獨請求對響應的等待時間,使我們得到更快速的瀏覽。
  另外,HTTP/1.1服務器端處理請求時按照收到的順序進行,這就保證了傳輸的正確性。當然,服務器端在發生連接中斷時,會自動的重傳請求,保證數據的完整性。
  HTTP/1.1還提供了身份認證、狀態管理和Cache緩存等機制。這裏,我想特別提一下關於HTTP/1.1中的Cache緩存機制對HTTP /1.0的不足之處的改進,它嚴格全面,既可以減少時間延遲、又節省了帶寬。HTTP/1.1採用了內容協商機制,選擇最合適的用戶的內容表現形式。
  現在,很多地方都有用到的虛擬主機技術在HTTP/1.1中也可以實現。所謂的虛擬主機技術,就是同一主機地址實際對應多臺主機。通俗的講,當你同時在一個網站申請兩個主頁時,用協議分析儀可以發現其實這兩個主頁對應的是同一個IP地址。這樣用多臺完全相同的機器形成WWW服務器就可以提高處理的吞吐量。
  傳統的解決方案是改造域名服務器使其可以根據一定的算法將同一域名解釋成不同的IP地址。分別對應虛擬主機的每臺機器,其缺點是要求每臺機器佔用完全獨立的IP地址,這與IP地址的缺乏是相矛盾的。
  HTTP/1.1提供的解決方案在HTTP協議自身中加入了指定不同主機的功能,從而多臺主機可以共享一個IP地址,既提高了性能又便於管理。
  因爲HTTP/1.1是Internet現行的標準協議,這裏詳細介紹其相關語法。
  首先,HTTP/1.1格式可寫爲:
      其中請求方法是請求一定的Web頁面的程序或用於特定的URL。可選用下列幾種:
  請求方法:
1. GET : 請求獲取Request-URI所標識的資源;
2. POST :在Request-URI所標識的資源後附加新的數據;
3. HEAD :請求獲取由Request-URI所標識的資源的響應消息報頭;

詳解:http://blog.sina.com.cn/s/blog_6bdc4c220100tdeb.html

4.PUT :請求服務器存儲一個資源,並用Request-URI作爲其標識;

把消息本體中的消息發送到一個URL,跟POST類似,但不常用。
簡單地說:通常用於向服務器發送請求,如果URI不存在,則要求服務器根據請求創建資源,如果存在,服務器就接受請求內容,並修改URI資源的原始版本。
-----PUT請求那些封裝在Request-URI的實體。如果Request-URI引用一個已存在的資源,則該封裝實體應該作爲原始服務器上的修改版本。如果Request-URI不是指向一個已存在的資源,並且該URI可被請求的用戶代碼定義爲新資源,則原始服務器可用此URI創建新的資源。如果新的資源被創建,這個原始服務器就必須通過201(Created)響應通知用戶代理。如果已有資源被修改,則發送200或者204響應,表示成功完成了該請求。如果Request-URI既沒有創建也沒有修改資源,則應給予適當的錯誤響應來反映問題本質。實體的接受者不能忽略任何不理解或沒有實現的Content-*(如Content-Range)頭部,並且必須返回501響應。
如果請求經過緩存,並且Request-URI標識出一個或多個當前緩存的實體,則那些實體視爲過期了。該方法的響應不會被緩存。

5.DELETE :請求服務器刪除Request-URI所標識的資源;
6. TRACE :請求服務器回送收到的請求信息,主要用於測試或診斷;
7. CONNECT :保留將來使用;
8. OPTIONS :請求查詢服務器的性能,或者查詢與資源相關的選項和需求;

    OPTIONS請求方法的主要用途有兩個:1、獲取服務器支持的HTTP請求方法;也是黑客經常使用的方法。2、用來檢查服務器的性能。例如:AJAX進行跨域請求時的預檢,需要向另外一個域名的資源發送一個HTTP OPTIONS請求頭,用以判斷實際發送的請求是否安全。

詳解:http://blog.sina.com.cn/s/blog_6bdc4c220100td4z.html

  9.PATCH: 實體中包含一個表,表中說明與該URI所表示的原內容的區別。
  10.MOVE: 請求服務器將指定的頁面移至另一個網絡地址。
  11.COPY: 請求服務器將指定的頁面拷貝至另一個網絡地址。
  12.LINK: 請求服務器建立鏈接關係。
  13.UNLINK: 斷開鏈接關係。
  14.WRAPPED: 允許客戶端發送經過封裝的請求。
  15.Extension-mothed:在不改動協議的前提下,可增加另外的方法。
比如:
  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已經在醞釀之中,它將會提供更好的安全性、更快的速度,其改進要點爲:模塊化強、網絡效率高、安全性更好、結構更簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章