萬盛學電腦網

 萬盛學電腦網 >> 網絡應用技術 >> 應用教程 >> HTTP協議詳解

HTTP協議詳解

  HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾年的使用與發 展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規范化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。

  HTTP協議的主要特點可概括如下:

  1.支持客戶/服務器模式。

  2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。

  3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

  4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。采用這種方式可以節省傳輸時間。

  5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

  一、HTTP協議詳解之URL篇

  http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連接方式,HTTP1.1版本中給出一種持續連接的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。

  HTTP URL (URL是一種特殊類型的URI,包含了用於查找某個資源的足夠的信息)的格式如下:

  http://host[":"port][abs_path]

  http表示要通過HTTP協議來定位網絡資源;host表示合法的Internet主機域名或者IP地址;port指定一個端口號,為空則使 用缺省端口80;abs_path指定請求資源的URI;如果URL中沒有給出abs_path,那麼當它作為請求URI時,必須以“/”的形式給出,通 常這個工作浏覽器自動幫我們完成。

  eg:

  1、輸入:www.guet.edu.cn

  浏覽器自動轉換成:http://www.guet.edu.cn/

  2、http:192.168.0.116:8080/index.jsp

  二、HTTP協議詳解之請求篇

  http請求由三部分組成,分別是:請求行、消息報頭、請求正文

  1、請求行以一個方法符號開頭,以空格分開,後面跟著請求的URI和協議的版本,格式如下:Method Request-URI HTTP-Version CRLF

  其中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議版本;CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CR或LF字符)。

  請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:

  GET 請求獲取Request-URI所標識的資源

  POST 在Request-URI所標識的資源後附加新的數據

  HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭

  PUT 請求服務器存儲一個資源,並用Request-URI作為其標識

  DELETE 請求服務器刪除Request-URI所標識的資源

  TRACE 請求服務器回送收到的請求信息,主要用於測試或診斷

  CONNECT 保留將來使用

  OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求

  應用舉例:

  GET方法:在浏覽器的地址欄中輸入網址的方式訪問網頁時,浏覽器采用GET方法向服務器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)

  POST方法要求被請求服務器接受附在請求後面的數據,常用於提交表單。

  eg:POST /reg.jsp HTTP/ (CRLF)

  Accept:image/gif,image/x-xbit,... (CRLF)

  ...

  HOST:www.guet.edu.cn (CRLF)

  Content-Length:22 (CRLF)

  Connection:Keep-Alive (CRLF)

  Cache-Control:no-cache (CRLF)

  (CRLF) //該CRLF表示消息報頭已經結束,在此之前為消息報頭

  user=jeffrey&pwd=1234 //此行以下為提交的數據

  HEAD方法與GET方法幾乎是一樣的,對於HEAD請求的回應部分來說,它的HTTP頭部中包含的信息與通過GET請求所得到的信息是相同 的。利用這個方法,不必傳輸整個資源內容,就可以得到Request-URI所標識的資源的信息。該方法常用於測試超鏈接的有效性,是否可以訪問,以及最 近是否更新。

  2、請求報頭後述

  3、請求正文(略)

  三、HTTP協議詳解之響應篇

  在接收和解釋請求消息後,服務器返回一個HTTP響應消息。

  HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文

  1、狀態行格式如下:

  HTTP-Version Status-Code Reason-Phrase CRLF

  其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。

  狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

  1xx:指示信息--表示請求已接收,繼續處理

  2xx:成功--表示請求已被成功接收、理解、接受

  3xx:重定向--要完成請求必須進行更進一步的操作

  4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

  5xx:服務器端錯誤--服務器未能實現合法的請求

  常見狀態代碼、狀態描述、說明:

  200 OK //客戶端請求成功

  400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解

  401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用

  403 Forbidden //服務器收到請求,但是拒絕提供服務

  404 Not Found //請求資源不存在,eg:輸入了錯誤的URL

  500 Internal Server Error //服務器發生不可預期的錯誤

  503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

  eg:HTTP/1.1 200 OK (CRLF)

  2、響應報頭後述

  3、響應正文就是服務器返回的資源的內容

  四、HTTP協議詳解之消息報頭篇

  HTTP消息由客戶端到服務器的請求和服務器到客戶端的響應組成。請求消息和響應消息都是由開始行(對於請求消息,開始行就是請求行,對於響應消息,開始行就是狀態行),消息報頭(可選),空行(只有CRLF的行),消息正文(可選)組成。

  HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。

  每一個報頭域都是由名字+“:”+空格+值 組成,消息報頭域的名字是大小寫無關的。

  1、普通報頭

  在普通報頭中,有少數報頭域用於所有的請求和響應消息,但並不用於被傳輸的實體,只用於傳輸的消息。

  eg:

  Cache-Control 用於指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制),HTTP1.0使用的類似的報頭域為Pragma。

  請求時的緩存指令包括:no-cache(用於指示請求或響應消息不能緩存)、no-store、max-age、max-stale、min-fresh、only-if-cached;

  響應時的緩存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.

  eg:為了指示IE浏覽器(客戶端)不要緩存頁面,服務器端的JSP程序可以編寫如下:response.sehHeader("Cache-Control","no-cache");

  //response.setHeader("Pragma","no-cache");作用相當於上述代碼,通常兩者//合用

  這句代碼將在發送的響應消息中設置普通報頭域:Cache-Control:no-cache

  Date普通報頭域表示消息產生的日期和時間

  Connection普通報頭域允許發送指定連接的選項。例如指定連接是連續,或者指定“close”選項,通知服務器,在響應完成後,關閉連接

  2、請求報頭

  請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。

  常用的請求報頭

  Accept

  Accept請求報頭域用於指定客戶端接受哪些類型的信息。eg:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept:text/html,表明客戶端希望接受html文本。

  Accept-Charset

  Accept-Charset請求報頭域用於指定客戶端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在請求消息中沒有設置這個域,缺省是任何字符集都可以接受。

  Accept-Encoding

  Accept-Encoding請求報頭域類似於Accept,但是它是用於指定可接受的內容編碼。eg:Accept-Encoding:gzip.deflate.如果請求消息中沒有設置這個域服務器假定客戶端對各種內容編碼都可以接受。

  Accept-Language

  Accept-Language請求報頭域類似於Accept,但是它是用於指定一種自然語言。eg:Accept-Language:zh-cn.如果請求消息中沒有設置這個報頭域,服務器假定客戶端對各種語言都可以接受。

  Authorization

  Authorization請求報頭域主要用於證明客戶端有權查看某個資源。當浏覽器訪問一個頁面時,如果收到服務器的響應代碼為401(未

copyright © 萬盛學電腦網 all rights reserved