HTTP 1.1的簡要介紹
HTTP 1.1是一個基于文本的互聯(lián)網(wǎng)實體信息交互主流協(xié)議,這里的實體可以是WAP兼容瀏覽器之類的用戶終端,可以是WAP網(wǎng)關(guān)之類的代理服務(wù)器,也可以是Java servlet之類的源服務(wù)器程序。它們之間的交互信息就是兩大類:客戶端對服務(wù)器端的請求和服務(wù)器端對客戶端的響應(yīng)。一次完整的交互包括一個請求和對它的響應(yīng)。
所有的請求和響應(yīng)都采用[RFC822]中定義的標準互聯(lián)網(wǎng)消息格式,框架如下:
* 消息定義
* 沒有或多個消息頭
* CRLF
* 可選的消息本體
其中消息定義不分指定了發(fā)送消息的類型。請求和響應(yīng)都可以包含多個消息頭,用來進一步或者重新定義用戶終端和服務(wù)器之間的交互。CRLF僅僅用來將信息定義和消息本體分開。
1、 請求
在消息定義部分可以這樣定義請求: 請求類型 URL HTTP/1.1
其中請求類型可以是下面的一種:
①. OPTION:返回請求者和相應(yīng)者之間可以使用的通信選項,主要用來檢測服務(wù)器處理能力;
②. GET:獲得以URL標示的文件內(nèi)容或者程序執(zhí)行結(jié)果。服務(wù)器根據(jù)文件名后綴判斷服務(wù)內(nèi)容,比如該URL是靜態(tài)文本還是一個程序;
③. HEAD:除了不返回響應(yīng)的信息本體以外,得到的是跟GET一樣的信息。一般用來測試鏈接的有效性、可達性和近期修改;
④. POST:把消息本體中的消息發(fā)送到一個URL或者其他類似的服務(wù)器端定義行為。通常用來提交一個HTML表單或者一些數(shù)據(jù)操作活動;
⑤. PUT:把消息本體中的消息發(fā)送到一個URL,跟POST類似,但不常用;
⑥. DELETE:刪除URL指定的資源;
⑦. TRACE:調(diào)用一個遠程應(yīng)用層請求消息回路。發(fā)出這個消息的用戶終端除了收到原來的消息內(nèi)容以外,還得到消息在Internet上的傳送路徑。
最常用的請求類型--也是我們在處理WAP應(yīng)用時最關(guān)心的--是GET和POST。假設(shè)有一個WML文檔,我們用UP的瀏覽器去瀏覽的話,就會向服務(wù)器發(fā)出如下GET請求:
GET www.wap86.com/index.wml HTTP/1.1
accept-charset: UTF-8
accept-language: ch
accept: text/vnd.wap.wml, */*, image/bmp, text/html
user-agent: UP.Browser/3.1-UPG1 UP.Link/3.2
host: www.wap86.net
……
其中粗體的部分是HTTP消息頭,這里我們忽略了一些與我們關(guān)系不大的消息頭。
accept-charset: 用戶終端支持的字符集
accept-language: 用戶終端目前使用的語言
accept: 用戶終端可以接受的MIME文件類型
user-agent: 用戶終端供應(yīng)商提供的終端描述信息
host: 請求信息發(fā)送到的域名
2、 響應(yīng)
響應(yīng)的消息定義部分一般是這樣的:HTTP/1.1 狀態(tài)碼 狀態(tài)描述 在[RFC2616]中定義了近40種不同的狀態(tài)碼。其中最常見的是3個:
200 OK
401 Unauthorized
404 Not Found
繼續(xù)上面那個例子,如果該URL合法的話,服務(wù)器的響應(yīng)會是這樣的:
HTTP/1.1 200 OK
Server: www/5.0
Date: Fri, 26 Oct 2000 12:15:23 GMT
Connection: Keep-Alive
Content-Length: 1211
Content_Type: text/vnd.wap.wml
Last-Modified: Mon, 22 Oct 2000 18:19:24 GMT
<?xml version=”1.0”>
<!<!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN”
“http://www.wapforum.org/DTD/wml_1.1.xml”>
……
其它內(nèi)容
……
這個響應(yīng)信息里包括了響應(yīng)的數(shù)字代碼和文本描述,然后是一組消息頭。在一個換行符以后就是消息本體,在這里,消息本體就是www.wap86.net/index.wml的源代碼。
Server: 發(fā)出響應(yīng)的服務(wù)器
Date: 響應(yīng)發(fā)出的時間
Connection: 指示用戶終端保持連接
Content-Length: 響應(yīng)信息的長度,從DECK的第一個"<"字符開始計算
Content_Type: 響應(yīng)的MIME類型
Last-Modified: 響應(yīng)中DECK的最后修改時間
當(dāng)用戶終端接收到響應(yīng)以后,會對其狀態(tài)信息和消息頭進行解碼,然后決定對響應(yīng)做出什么樣的動作。如果收到OK響應(yīng),一般會把消息本體里的內(nèi)容顯示在屏幕上。對于桌面終端,通常是HTML,對于WAP瀏覽器,則是WML。
HTTP是一種很羅嗦的協(xié)議。即使是簡單沒有任何數(shù)據(jù)的請求和響應(yīng)都要產(chǎn)生數(shù)百字節(jié)的消息。WAP通過WAP網(wǎng)關(guān)來解決這個問題。WAP網(wǎng)關(guān)一個很重要的功能就是把所有的HTTP1.1消息轉(zhuǎn)換成無線任務(wù)協(xié)議的消息格式。這種格式是壓縮的二進制協(xié)議,兼容HTTP1.1。它能解析所有的請求和響應(yīng)消息,并轉(zhuǎn)換成最精簡的BIT序列。
到這里我們已經(jīng)介紹了HTTP1.1的主要內(nèi)容。當(dāng)然HTTP1.1還有很多復(fù)雜的內(nèi)容,但是在這里并不打算多講,如果你有興趣,可以去相關(guān)網(wǎng)站查找它的資料。作者只想大家知道一點:用戶終端和服務(wù)器之間還有比GET和POST請求更多的互動消息,它們一樣有請求和響應(yīng)消息頭,并且可以包含一些信號來影響WAP應(yīng)用程序的執(zhí)行和性能。