- ASP.NET本質論
- 郝冠軍
- 1237字
- 2018-12-31 19:25:12
1.1.3 HTTP協(xié)議
當瀏覽器尋找到Web服務器的地址之后,瀏覽器將幫助我們把對服務器的請求轉換為一系列參數(shù)發(fā)送給Web服務器。服務器收到瀏覽器發(fā)來的請求參數(shù)之后,將會分析這些數(shù)據(jù)并進行處理,然后向瀏覽器回應處理的結果,也就是一些新的數(shù)據(jù);這些數(shù)據(jù)通常是HTML網頁或者圖片。瀏覽器收到之后,解析這些數(shù)據(jù),將它們呈現(xiàn)在瀏覽器的窗口中,就是我們現(xiàn)在看到的網頁。
在瀏覽器與Web服務器的對話中,需要使用雙方都能夠理解的語法規(guī)范進行通信,這種程序之間進行通信的語法規(guī)范,我們稱之為協(xié)議。協(xié)議有許多種,根據(jù)國際標準化組織ISO的網絡參考模型,程序與程序之間的通信可以分為7層,從低級到高級依次為:物理層、數(shù)據(jù)鏈路層、網絡層、傳輸層、會話層、表示層、應用層。每層都有自己所對應的協(xié)議。比如,應用層之間的通信協(xié)議,我們稱為應用層協(xié)議。不同的應用程序可能有著不同的應用層協(xié)議。同一層的協(xié)議也有許多種。
瀏覽器與Web服務器之間的協(xié)議是應用層協(xié)議,當前,我們主要遵循的協(xié)議為HTTP/1.1。HTTP協(xié)議是Web開發(fā)的基礎,這是一個無狀態(tài)的協(xié)議,客戶機與服務器之間通過請求和響應完成一次會話(Session)。每次會話中,通信雙方發(fā)送的數(shù)據(jù)稱為消息 (Message),消息分為兩種:請求消息和回應消息。
消息的格式如圖1-2所示。每個消息可能由三部分組成,第一部分為請求行或者回應的狀態(tài)行,第二部分為消息的頭部,第三部分為消息體部分。消息頭部分和消息體部分使用一個空行進行分隔。

圖1-2 消息的格式
通常情況下,我們在客戶端使用瀏覽器來訪問服務器,瀏覽器軟件幫助我們構造所有的請求消息。使用Fiddler軟件,可以幫助我們檢測到瀏覽器與服務器之間的通信內容,如圖1-3所示。

圖1-3 用Fiddler檢測瀏覽器與服務器之間的通信內容
圖1-3右上部為瀏覽器請求的內容,可以看到,第一行為請求行,請求行的內容為:
GET http://www.microsoft.com/HTTP/1.1
下面的連續(xù)7行為請求頭部分,然后是一個空行,由于是GET請求,所以沒有請求體部分。
圖1-3右下部為服務器回應的內容,第一行為回應的狀態(tài)行,HTTP/1.1 302 Found表示請求的內容可以找到,但是需要到另外的地址去獲取。下面的連續(xù)10行為回應的頭部,其中Location:/en/us/default.aspx用來說明轉到的地址;Content-Length:142說明回應體中包含142個字節(jié)的內容。一個空行分隔了回應的頭部和回應體部分,回應體中為一個簡單的HTML網頁。
HTTP協(xié)議定義了內容的格式,這是一個應用層的協(xié)議,應用層協(xié)議的內容需要通過傳輸層在瀏覽器和服務器之間傳送,TCP/IP協(xié)議是ISO網絡參考模型的一種實現(xiàn)。在TCP/IP協(xié)議中,與網絡程序員相關的主要有兩個層:傳輸層和應用層。
傳輸層協(xié)議負責解決數(shù)據(jù)的傳輸問題,包括數(shù)據(jù)通信的可靠性問題。傳輸層依賴更低層的網絡層完成實際的數(shù)據(jù)傳輸,在TCP/IP網絡協(xié)議中,負責可靠通信的傳輸層協(xié)議為TCP協(xié)議。而網絡層一般由網絡驅動來實現(xiàn),普通的程序員不會涉及;在TCP/IP協(xié)議中,網絡層的協(xié)議為IP協(xié)議。
應用層用于在特定的應用程序之間傳輸數(shù)據(jù)。HTTP協(xié)議就是TCP/IP協(xié)議中專門用于瀏覽器與Web服務器之間通信的應用層協(xié)議。應用層協(xié)議依賴于傳輸層協(xié)議完成數(shù)據(jù)傳輸,傳輸層協(xié)議依賴于網絡層協(xié)議完成數(shù)據(jù)傳輸,它們的關系如圖1-4所示。

圖1-4 瀏覽器與服務器之間網絡通信的傳輸過程
- Dynamics 365 Application Development
- aelf區(qū)塊鏈應用架構指南
- JavaScript從入門到精通(第3版)
- 零基礎學Java(第4版)
- 小程序,巧運營:微信小程序運營招式大全
- 算法訓練營:提高篇(全彩版)
- Hands-On Full Stack Development with Go
- Python深度學習:模型、方法與實現(xiàn)
- 0 bug:C/C++商用工程之道
- 詳解MATLAB圖形繪制技術
- Regression Analysis with Python
- Python機器學習與量化投資
- Instant GLEW
- Get Your Hands Dirty on Clean Architecture
- Python數(shù)據(jù)科學實踐指南