1、c/s結構與b/s結構的差別
a、硬體環境方面。c/s結構是建立在區域網路基礎上的,而b/s結構是建立在廣域網的基礎之上的。
b、軟體重用性方面。c/s程式的軟體重用性沒有b/s程式中軟體的重用性好。
c、系統維護方面。c/s結構的系統更新困難,必須整體考量,要實作更新可能需要重新實作一個系統。b/s結構中可以僅更換個别建構,實作系統的無縫更新,降低系統維護的開銷,更新簡單。
d、使用者接口方面。b/s結構使用浏覽器作為展示界面,是以有更加豐富的表現方式,而c/s結構表現方法有限。
e、處理問題方面。c/s結構與作業系統有關,b/s結構可以面向不同的使用者群,地域上可以是分散的,與作業系統平台的關系較小。
2、解析http協定請求
(1)、請求行
請求行隻包括三個内容:方法、請求資源的uri和http版本,其格式可以表示為:
method request-uri http-version crlf
其中,crlf表示回車和換行。
方法有get、post等
(2)、請求報頭
常見的請求報頭有accept和user-agent。accept用于指定用戶端所接受的資訊類型。
例如:accept:text/html
accept:image/gif
表明用戶端可接收圖像和html檔案或文本檔案
user-agent用于将發送請求的用戶端資訊,如用戶端的作業系統名稱和版本資訊、浏覽器的名稱和版本資訊等告知伺服器。
其他常用的請求報頭說明如下:
accept:用于指定用戶端所支援的資訊類型。
accept-charset:指定用戶端可以接受的字元集,如iso-8859-1、gb2312等。如果未設定這個域,則表示可以接收任何字元集。
accept-encoding:指定用戶端可接受的編碼。
accept-language:指定用戶端可接受的自然語言,如果該域未設定,則表示用戶端可接受各種語言。
host:指定被請求資源所在的主機和端口号,預設端口号為80。
connection:指定請求結束後是保持連接配接還是關閉連接配接。
http請求舉例:
get /index.html http/1.1
accept: text/plain /*純ascii碼文本檔案*/
accept: text/html /*html文本檔案*/
user-agent: mozilla/4.5(winnt) /*指定使用者代理*/
/*空行*/
需要注意的是,使用get方法的http請求中不能包含實體内容,而使用post、put和delete方法的http請求中可以包含實體内容。
(3)、get方法和post方法
get方法中對總的字元數是有限制的,這取決去具體的伺服器。如果使用者在位址欄中鍵入的文本太長,可能會導緻get方法無法正常工作。
用get方法發送的資料會追加到url的後面,而且在浏覽器的位址欄中會顯示出這些資料,是以一些比較隐私的或敏感的資料不建議使用get方法來發送。
在get方法中,參數會追加到請求url後面,且以”?”開頭。各個參數之間使用”&”進行分隔。
使用post方法發送資料的示例如下:
post /index.html http1.1 /*請求行*/
host:www.javait.com /*存放所請求對象的主機*/
user-agent:mozilla/4.5(winnt) /*指定使用者代理*/
accept:text/html /*html文本檔案*/
accept-language:zh-cn /*指定可接受的語言*/
content-length:22
connection:keep-alive
param1=abc¶m2=def /*送出的參數*/
3、解析http協定響應
(1)、狀态行
狀态行由http版本(http-version)、狀态碼(status-code)以及解釋狀态碼的簡單短語(reason-phrase)三部分構成,其格式如下:
http-version status-code reason-phrase crlf
狀态碼由三位數字組成,共有5大類33種,其中第一個數字指定了響應類别,取值為1-5,後面兩位沒有具體的規定。
1xx:訓示資訊,如請求收到了或正在處理。
2xx:成功。
3xx:重定向。
4xx:用戶端錯誤,如請求中含有錯誤的文法或不能正常完成。
5xx:伺服器端錯誤,如伺服器失效而無法完成請求。
例如:
200 ok 成功
304 not modified 未修改
400 bad request 錯誤請求
404 not found 未找到
典型的響應狀态嗎解釋如下:
200:表示請求成功,成功傳回了請求的資源。
302/307:表示臨時重定向,此時被請求的文檔已經臨時移動到其他位置,該文檔新的url将在location響應報頭中給出。
401:表示浏覽器通路的是一個受到密碼保護的頁面。
403:表示伺服器收到請求,但拒絕提供服務。
404:表示找不到資源,即伺服器上不存在浏覽器請求的資源。
500:表示内部伺服器錯誤,即伺服器端的cgi、asp、jsp等程式發生了錯誤。
503:表示伺服器暫時性超載,不能處理目前的請求。
狀态行舉例:
http 1.0 200 ok
(2)、響應報頭
常見的響應報頭如下:
allow:指出伺服器所支援的請求方法,如get、post等方法。
content-encoding:指定文檔的編碼方法。
content-length:指定響應中資料的位元組長度。
content-type:指定回送資料的mime類型。
date:指定發送http消息的日期。
last-modified:指定傳回資料的最後修改時間。
location:重定向請求者到一個新的uri位址。
refresh:指定浏覽器定時重新整理的時間。
expired:指定浏覽器緩存資料的時間。
server:指定伺服器的名稱,包含了處理請求的伺服器使用的軟體産品資訊,與user-agent請求報頭相對應。
(3)、響應正文
響應正文是指伺服器所傳回的資源内容,如html頁面。響應報頭和響應正文之間必須用空行來分隔。
一個典型的http響應示例如下:
http/1.1 200 ok /*狀态行*/
connection: close /*連接配接狀态*/
date:wed, 19 nov 2011 02:20:45 gmt /*日期*/
server:apache/2.0.54(unix) /*伺服器*/
content-length:397 /*指定資料包含的位元組長度*/
content-type:text/html /*指定傳回資料的mime類型*/
/*空行*/
<html>
<body>
/*資料*/
</body>
</html>