HTTP網絡協議

第1章 瞭解Web及網絡基礎

 

HTTP的誕生

互聯網早期,Tim Berners-Lee博士提出了一種能讓遠隔兩地研究者們共享知識的設想。該設想的基本理念是:藉助多文檔之間相互關聯的超文本(HyperText),連成可相互參閱的WWW(World Wide Web, 萬維網) 

爲實現這種理念,提出了3WWW的構建技術,分別是作爲頁面文本標記語言的HTML、作爲文檔傳輸協議的HTTP和指定文檔所在地址的URLHTTP協議因此而誕生。

 

HTTP的發展

HTTP協議發展至今共經歷了三個版本,如下所示:

HTTP/0.9: HTTP1990年問世,那時它並沒有作爲標準被建立,此時的版本含有HTTP/1.0之前版本的意思,因而被稱爲HTTP/0.9

HTTP/1.0: HTTP被正式作爲標準發佈是在1996.05,命名爲HTTP/1.0

HTTP/1.1: 1997.01公佈的HTTP/1.1是目前主流的HTTP協議版本,它與HTTP/1.0的主要區別是添加了持久連接,也就是可以在一個連接中傳輸多個對象。

 

TCP/IP

 與互聯網相關的協議集合起來總稱爲TCP/IPTCP/IP協議族裏重要的一點是分層,其按照層次從上往下分別分爲應用層、傳輸層、網絡層和數據鏈路層,而各層的作用如下所示:

 應用層包含了所有高層協議,向用戶提供了應用服務,如FTPDNSHTTP等。

 傳輸層傳輸層提供了對於網絡連接中兩臺計算機之間的數據傳輸,此層包含了兩個性質不同的協議:TCPUDP

 網絡層處理在網絡上流動的數據包,決定了數據包的傳輸路線。

 鏈路層處理連接網絡的硬件部分。包括控制操作系統、硬件的設備驅動、NIC以及光纖等物理可見部分。

 

其他協議

 IP

IP協議位於網絡層,作用是把各種數據包傳送給遠程機器,通過ARP協議找出IP地址所對應的MAC地址以達到傳送的目的。

 TCP

TCP位於傳輸層,提供可靠的字節流服務(把大塊數據分割成以報文段爲單位的數據包進行管理)TCP採用三次握手策略確保數據準確無誤地送達目標處。

DNS

位於應用層,提供從域名到IP地址或從IP地址到域名的服務。 

URI/URL

URI用字符串標識某一互聯網資源,而URL表示資源的地點。

 

2章 簡單的HTTP協議

 

概述

應用HTTP協議時,一端充當客戶端角色,另一端充當服務器角色,兩端之間通過請求和響應的交換達成通信。

請求報文由請求方法、請求URI、協議版本、可選的請求首部字段和內容實體構成的。

響應報文由協議版本、狀態碼、狀態語、可選的響應首部字段以及實體主體構成。

HTTP是一種無狀態的協議,即不對發送過的請求或響應做持久化處理。

 

HTTP方法 

GET: 獲取資源

POST: 傳輸實體主體

PUT: 傳輸文件

HEAD: 獲得報文首部

DELETE: 刪除文件

OPTIONS: 詢問支持的方法

TRACE: 追蹤路徑

CONNECT: 要求用隧道協議連接代理

 

持久化

HTTP協議初始版本中,每進行一次HTTP通信都要進行TCP連接的建立和斷開,造成了額外的開銷,爲了解決這種問題,HTTP/1.1提出了持久連接,又稱爲HTTP keep-alive,它的特點是,只要任意一段沒有明確提出斷開連接,則保持TCP的連接狀態。也就是說,TCP的持久連接旨在建立一次TCP連接後進行多次HTTP請求與響應的交互。

管線化技術的出現解決了多個HTTP的阻塞請求方式,使得多個HTTP請求能以並行的方式進行發送,提高了請求響應的效率。

 

Cookie管理狀態

HTTP是無狀態協議,本身不對已經發送過的請求與響應進行管理,爲了解決這方面的不足,引入了Cookie技術,這是一種通過在請求與響應保溫中寫入Cookie信息來控制客戶端狀態的技術,Cookie會根據從服務器端發送的響應報文中的Set-Cookie的首部字段信息,通知客戶端保存Cookie,,當客戶端下一次向服務器發送請求時,會在請求報文中加入Cookie的信息發送,以通知服務器端識別是來自哪一個用戶。

 

3章 HTTP報文

 

報文結構

用於HTTP協議交互的信息被稱爲HTTP報文,其中請求端(客戶端)的報文稱爲請求報文,而響應端(服務器端)的報文稱爲響應報文。

報文的結構由起始行(請求行/狀態行)、首部(header)和主體(body)構成。

 

http報文結構

編碼提升傳輸速率

HTTP在傳輸數據時可以按照數據原貌直接傳輸,但也可以在傳輸過程中使用編碼提升傳輸速率。

 

壓縮傳輸

由服務器進行實體內容的壓縮,內容傳輸完成後由客戶端進行解碼。常見的內容編碼有:

gzip(GNU zip)compress(UNIX系統的標準壓縮)deflate(zlib)identity(不進行編碼)

 

分塊傳輸

HTTP通信過程中,請求的編碼實體資源尚未全部傳輸完成之前,瀏覽器無法顯示請求的頁面。在傳輸大容量數據時,通過把數據分割成多塊,能夠讓瀏覽器逐步顯示頁面。

 

其他

多部分對象集合

一份報文主體內可含有多類型實體,通過Content-Type來標識。如multipart/form-datamultipart/byteranges

 

範圍請求

http中可以通過headerRange字段指定請求的範圍,如Range: bytes=5001-10000

 

內容協商

內容協商機制是指客戶端和服務器端就響應的資源內容進行交涉,然後提供給客戶端最爲合適的資源。

內容協商技術包含:服務器驅動協商、客戶端驅動協商和透明協商。

 

4章 返回結果的HTTP狀態碼

 

請求結果 

狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。

類別 原因短語

1XX Informational(信息性狀態碼) 接收的請求正在處理

2XX Success(成功狀態碼) 請求正常處理完畢

3XX Redirection(重定向狀態碼) 需求進行附加操作以完成請求

4XX Client Error(客戶端錯誤狀態碼) 服務器無法處理請求

5XX Server Error(服務器錯誤狀態碼) 服務器處理請求出錯

 

狀態碼

2XX 成功

200,表示從客戶端發來的請求在服務器端被正常處理了。 

204,請求處理成功,但是沒有資源返回。

206,請求處理成功,返回部分內容,響應報文中包含Content-Range指定範圍的實體內容。

 

3XX 重定向

301,永久性重定向,

302,臨時性重定向。

303,表示請求的資源存在着另一個URL,應使用GET方法定向獲取請求的資源。

304,表示請求的資源沒有改變,可以使用客戶端上未過期的資源。

307,臨時性重定向,不會從POST變成GET

 

4XX 客戶端錯誤

400, Bad Request,表示請求報文中存在語法錯誤。

401, Unauthorized,表示發送的請求需要有通過HTTP認證。 

403, Forbidden, 表示請求資源的訪問被服務器拒絕了。

404, Not Found,表示服務器上沒有請求的資源。

 

5XX 服務器錯誤

500, Internal Server Error,表示服務器在執行請求時發生了錯誤。

503, Service Unavailable,表示服務器暫時處於超負載或者正在進行停機維護,現在無法處理請求。

 

5章 與HTTP協作的Web服務器

 

虛擬主機實現多域名

HTTP/1.1規範允許一臺HTTP服務器搭建多個Web站點。在相同的IP地址下,由於虛擬主機可以寄存多個不同主機名和域名的Web網站,因此在發送HTTP請求時,需要在Host首部指定主機名或域名的URI

 

通信數據轉發程序

HTTP通信時,除了客戶端和服務器以外,還有一些用語通信數據轉發的應用程序,例如代理、網關和隧道。

代理

代理是一種具有轉發功能的應用程序,它扮演了客戶端與服務器之間中間人的角色,接收來自客戶端的請求,並轉發給目標服務器,同時接收目標服務器的響應並轉發給客戶端。

 

網關

網關是轉發其他服務器通信數據的服務器,接收客戶端請求時,就像自己擁有資源的服務器一樣對請求進行處理。

 

隧道

隧道是在相隔甚遠的客戶端和服務器兩者之間進行中轉,並保持雙方通信連接的應用程序。它可按要求建立起一條與服務器相通的線路,並使用SSL燈加密手段進行通信,保證通信的安全性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章