- Java Web及其框架技術
- 陳振興主編
- 2262字
- 2024-02-01 14:36:46
1.2 Web的工作原理
在使用B/S架構模式進行Web開發時,瀏覽器向Web服務器發送一個請求,Web服務器會對請求做出處理,并將處理結果返回給客戶端。在這個交互過程中,數據的傳輸需要遵循HTTP協議。
1.2.1 HTTP協議
HTTP是Hypertext Transfer Protocol的縮寫,即超文本傳輸協議,是瀏覽器與Web服務器進行數據交互時需要遵守的規范。當客戶端與服務器端建立連接后,客戶端就可以向服務器端發送URL(Uniform Resource Locator,統一資源定位符)請求,這個過程被稱為HTTP請求,服務器端在接收到請求后會做出響應,這個過程被稱為HTTP響應??蛻舳伺c服務器端基于HTTP協議的交互過程如圖1-3所示。

圖1-3 客戶端與服務器端基于HTTP協議的交互過程
基本運行過程如下。
(1)當客戶端向服務器端發送請求時,服務器端會開啟一個新的連接,通過這個連接,客戶端可以將HTTP請求傳送給服務器端。
(2)當服務器端收到HTTP請求時,將對該HTTP請求進行解析與處理,并將處理結果包裝成HTTP響應。
(3)服務器端會將HTTP響應傳送給客戶端,當客戶端接收到HTTP響應時,服務器端就會關閉這個連接。
1.2.2 HTTP報文格式
當用戶在瀏覽器中訪問某個網址、單擊某個鏈接或提交網頁上的表單時,瀏覽器會向服務器端發送請求數據,即HTTP請求報文。服務器端接收到請求數據時,會將處理后的數據傳送給客戶端,即HTTP響應報文。HTTP請求報文和HTTP響應報文統稱為HTTP報文。
1.HTTP請求報文
在HTTP中,一個完整的HTTP請求報文由3個部分組成:請求行、請求頭、請求正文,如圖1-4所示。

圖1-4 HTTP請求報文
(1)請求行。
請求行位于請求報文的第一行,它由請求方式、資源路徑(URL)和所使用的HTTP版本(協議版本)三個部分組成,格式如下。

對于圖1-4中的GET/index.html HTTP/1.1,GET是請求方式,index.html是請求資源路徑,HTTP/1.1是通信使用的HTTP協議版本。注意請求行中的每個部分均用空格分隔,以回車換行結束。常用請求方式有GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE和CONNECT共8種,每種方式都指明了操作服務器中指定的URI資源的方式,HTTP的常用請求方式如表1-1所示。
表1-1 HTTP的常用請求方式

①URI(Uniform Resource Identifier)即統一資源標識符,用來表示Web上的每種可用資源。
(2)請求頭。
在HTTP請求報文中,在請求行之后便是若干請求頭。請求頭主要用于向服務器端傳遞附加消息,如客戶端可以接收的數據類型、壓縮方法、語言及發送請求的超鏈接所屬頁面的URL地址等信息。請求頭由一個頭字段名稱和一個值構成,頭字段名稱和值之間用冒號(:)和空格分隔,格式如下。

需要注意的是,頭字段名稱不區分大小寫,但習慣上將單詞的首字母大寫。常用的請求頭字段如表1-2所示。
表1-2 常用的請求頭字段

續表

2.HTTP響應報文
當Web服務器收到瀏覽器的請求后,會將響應報文傳給瀏覽器。一個完整的響應報文由3個部分組成:響應狀態行、響應頭、響應實體,如圖1-5所示。

圖1-5 HTTP響應報文
(1)響應狀態行。
響應狀態行位于響應報文的第一行,它包含3個部分,即HTTP版本(協議版本)、一個表示成功或錯誤的整數代碼(狀態碼),以及對狀態碼進行描述的文本信息(狀態碼描述)。格式如下。

對于圖1-5中的HTTP/1.1 200 OK,HTTP/1.1是通信使用的協議版本,OK是狀態描述(說明客戶端請求成功),200是狀態碼。需要注意的是,請求行的每個部分都要用空格分隔,最后以回車換行結束。
響應狀態行中的狀態碼通常由3位數字組成,表示請求是否被處理,第一個數字定義了響應的類別,如1表示請求已接收,需要繼續處理;2表示請求已成功被服務器接收、理解并接受;3表示要完成請求,需要客戶端進一步操作,通常用來重定向;4表示客戶端的請求有錯誤;5表示服務器端出現錯誤。常用的狀態碼如表1-3所示。
表1-3 常用的狀態碼

續表

(2)響應頭。
在HTTP響應報文中,在響應狀態行之后便是若干響應頭。服務器端通過響應頭向客戶端傳遞附加信息,包括服務程序名、被請求資源需要的方式、客戶端請求資源的最后修改時間、重定向地址等。當服務器端向客戶端回送響應消息時,根據情況不同,發送的響應頭也不相同,常用的響應頭字段如表1-4所示。
表1-4 常用的響應頭字段

(3)響應實體。
響應實體用于存放需要返回給客戶端的數據信息。
在客戶端和服務器端之間進行請求和響應時,兩種常用方法是GET方法和POST方法。GET方法用于從指定的資源中請求數據;POST方法用于向指定的資源提交要被處理的數據。
1.2.3 GET方法
當客戶端要從服務器端讀取文檔時,使用GET方法。使用GET方法時,請求的參數和對應的值被附加在URL地址后面,一起被發送到服務器端。舉例如下。

從這個例子中我們可以看到,問號(?)代表URL的結尾與請求參數的開始,參數由參數名和參數值組成,中間用等號(=)連接。如果有多個參數,參數之間用&分隔。因此,GET方法在通過URL提交數據時,數據在URL中是可以被看到的,若用戶輸入的數據是非敏感數據,則可以使用GET方法。
當瀏覽器向Web服務器發送請求時,上述URL的參數部分會附加在需要訪問的URI資源后面,如GET/test/form.jsp?id=1001&name=zhang HTTP/1.1。
GET方法的特點如下。
(1)以GET方法獲取的數據能夠被緩存。
(2)以GET方法獲取的數據會保存在瀏覽器的瀏覽記錄中。
(3)以GET方法請求的URL能夠保存為瀏覽器書簽。
(4)以GET方法獲取的數據有長度限制。
(5)GET方法主要用于獲取數據。
(6)GET方法不應在處理敏感數據時使用。
1.2.4 POST方法
當客戶端向服務器端發送請求時可以使用POST方法,比如當用戶提交表單時,瀏覽器將使用POST方法提交表單內容。POST方法將請求參數放置在Request Body內,可以傳輸大量數據,也可以用來傳送文件。舉例如下。

POST方法不會像GET方法那樣將參數顯示在地址欄中,因此,如果用戶輸入的數據是敏感數據,那么還是使用POST方法為好。
POST方法的特點如下。
(1)以POST方法提交的數據不會被緩存。
(2)以POST方法提交的數據不會保留在瀏覽器歷史記錄中。
(3)以POST方法提交的數據不能被收藏至書簽。
(4)POST方法對提交的數據長度沒有要求。
- Dynamics 365 for Finance and Operations Development Cookbook(Fourth Edition)
- Python程序設計教程(第2版)
- Python從小白到大牛
- Learning Elixir
- INSTANT Sencha Touch
- 精通網絡視頻核心開發技術
- 網站構建技術
- The DevOps 2.5 Toolkit
- Django實戰:Python Web典型模塊與項目開發
- Node.js區塊鏈開發
- Scratch從入門到精通
- Visual C++程序設計與項目實踐
- IBM RUP參考與認證指南
- 讀故事學編程:Python王國歷險記
- 打造流暢的Android App