轉自:http://hi.baidu.com/%B0%D9%B6%C8hihi/blog/item/bbde0029da2cc5fd98250afa.html
2007-09-20 12:18HTTP
是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。可選用下列幾種:
GET: 請求指定的頁面資訊,並返回實體主體。
HEAD: 只請求頁面的首部。
POST: 請求伺服器接受所指定的文檔作為對所標識的URI的新的從屬實體。
PUT: 從用戶端向伺服器傳送的資料取代指定的文檔的內容。
DELETE: 請求伺服器刪除指定的頁面。
OPTIONS: 允許用戶端查看伺服器的效能。
TRACE: 請求伺服器在響應中的實體主體部分返回所得到的內容。
PATCH: 實體中包含一個表,表中說明與該URI所表示的原內容的區別。
MOVE: 請求伺服器將指定的頁面移至另一個網路地址。
COPY: 請求伺服器將指定的頁面拷貝至另一個網路地址。
LINK: 請求伺服器建立連結關係。
UNLINK: 取消連結關係。
WRAPPED: 允許用戶端發送經過封裝的請求。
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已經在醞釀之中,它將會提供更好的安全性、更快的速度,其改進要點為:模組化強、網路效率高、安全性更好、結構更簡單。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1759249