天天看點

No1_Web的工作機制

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>