1. 程式人生 > >HTTP協議中POST、GET、HEAD的區別是什麼?分別在什麼情況下使用?

HTTP協議中POST、GET、HEAD的區別是什麼?分別在什麼情況下使用?

  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。可選用下列幾種:
  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已經在醞釀之中,它將會提供更好的安全性、更快的速度,其改進要點為:模組化強、網路效率高、安全性更好、結構更簡單。