http協議進階(一)HTTP概述


參考書籍——《HTTP權威指南》

 

1、web客戶端和服務器

http客戶端發出請求,其中包含請求內容,發給服務器,服務器再返回內容中回送請求的數據,http客戶端和服務器構成了萬維網的基本組件

我們常說的客戶端,就是web瀏覽器,比如微軟的IE、Google的chrome,火狐的Firefox等,瀏覽器向服務器發送http請求對象,並將對象顯示在你的屏幕上

 

2、資源

web服務器是web資源的宿主,源頭;最簡單的web資源就是服務器文件系統中的靜態文件,其中可能包含很多內容:文本文件、HTML文件、word文件、圖片文件、Adobe的acrobat文件等

但資源不局限於靜態文件,它還可以根據需要生成軟件程序(比如照相機中活生生的照片、股票交易、房產交易的數據庫、在線商店中的禮物等等)

總之,所有類型的內容都來源於資源。。。

 

2.1 媒體類型

互聯網上有數千種不同的數據類型,http給每種需要通過http傳輸的對象都打上了MIME類型(MIME type)的數據格式標簽

MIME:多用途英特網郵件擴展

web瀏覽器每次從服務器取回一個對象時,會先查看其MIME類型,看看能否處理該類型;大多數瀏覽器都可以處理數百種常見的對象類型

MIME類型是一種文本標記,表示一種主要的對象類型和一個特定的子類型,中間由一條斜杠來分隔,例如

HTML格式的文本文檔:text/html

普通的ASCII文本文檔:text/plain

圖片類型:image/jpeg、image/gif

 

2.2 URI

每個服務器資源都有一個名字,這樣客戶端就可以說明它對什么資源感興趣

服務器資源名稱被稱為:統一資源標識符(Uniform Resource Identifier,URI)

URI就像因特網上的郵政地址一樣,在世界范圍內唯一標識並且定位信息資源

 

2.3 URL

URL:統一資源定位符是資源最常見的形式,它描述了一台特定服務器上某資源的特定資源,明確說明了如何從一個精確、固定的位置獲取資源

上圖的URL說明了協議、服務器和本地資源

大部分URL遵循一種標准格式,該格式包含三個部分:

第一部分:方案;說明了訪問資源所使用的協議類型,通常為http協議:hhtp://

第二部分:地址;比如:www.baidu.com

第三部分:指定服務器上某個資源,比如:specisal/saw-blade.gif

 

2.4 URN

URI的第二種方式就是URN:統一資源名;URN是作為特定內容的唯一名稱使用的,與目前的資源所在地無關,使用URN,可以將資源四處轉移,還可用同一個名字通過多種網絡協議來訪問資源

URN還處於試驗階段,因為其有效的工作需要一個支撐架構來解析資源的位置。而此類架構比較缺乏,后面詳解介紹

 

3、事務

一個事務由一條請求命令和一條響應結果構成,這種通信時通過http報文(HTTP message)的格式化數據塊進行的

事務也可以理解為從客戶端到服務器再到客戶端,一次完整通信的過程

 

3.1方法

http支持八種不同的請求命令,被稱為方法,每條請求報文都包含一個方法,告訴服務器要執行什么動作,之前有專門介紹過這幾種方法;

傳送門:http://www.cnblogs.com/imyalost/p/5630940.html

 

3.2狀態碼

每條響應報文都會攜帶一個狀態碼,用以告知客戶端,請求結果,或是否需要其他動作,之前也有介紹過這幾種狀態碼;

傳送門:http://www.cnblogs.com/imyalost/p/5688169.html

 

3.3一個web界面中可以包含多個對象

通常並不是單個資源,而是一組資源的集合(一個事務獲得一種資源,不同的資源【甚至分布在不同服務器上】組合構成一個界面)

 

4、報文

構成:一行行簡單的字符串組成

特點:純文本,方便讀寫

請求報文(request message):從客戶端發往服務器

響應報文(response message):從服務器發往客戶端

http報文包括以下三個部分:

起始行:報文第一行,用來說明要做什么,出現了什么情況

首部字段:位於起始行后面,有零個或者多個,每個首部字段都包含一個名字和一個值,便於解析,之間用冒號(:)隔開,以一個空行結束

主體:空行下面為報文主體,其中包含了所有類型的數據

 

5、連接協議

5.1 TCP/IP

http協議是位於整個數據傳輸通信的最上層應用層協議,不關注細節,負責通信細節的協議為傳輸層控制協議(Transmission Control Protocl,TCP)

TCP特點:1)無差錯的數據傳輸

        2)按序傳輸(按照數據發送順序到達服務器)

        3)未分段的數據流(任意時刻任何大小將數據發出去)

英特網是全世界計算機和網絡設備最常用的層次化分組交換網絡協議集,其隱藏了網絡和硬件的特點和弱點,使各類型的計算機和網絡都能進行可靠的通信

下面是互聯網協議的五層協議棧

 

 

5.2 連接、IP地址及端口號

客戶端向服務器發送請求報文之前,需要用網際協議(Internet Protocol,IP)地址和端口號在客戶端和服務器之間建立一條TCP/IP連接通道

URL是資源的地址,自然能夠為我們提供儲存資源的機器的地址,看下面幾個URL:

http://207.200.83.29:80/index.html

http://www.netscape.com:80/index.html

http://www.netscape.com/index.html

第一個使用了機器的IP地址207.200.83.29,以及端口號80

第二個使用了文本形式的域名(主機名:IP地址比較人性化的別稱)。通過域名服務(Domain Name Service,DNS)機制對主機名進行轉換,后面詳細介紹這一部分

第三個沒有端口號,這種情況一般默認端口號為80。

下圖為瀏覽器通過http顯示服務器中某個簡單HTML資源的流程導圖

 步驟如下:

1)瀏覽器從URL中解析出服務器主機名;

2)瀏覽器將主機名轉換為服務器的IP地址;

3)瀏覽器將端口號(如果有)從URL中解析出來;

4)瀏覽器建立一條與服務器的連接TCP連接通道;

5)瀏覽器向服務器發送一條http請求報文;

6)服務器向瀏覽器發送一條http響應報文;

7)結束通信,關閉連接,瀏覽器顯示具體資源;

說到這里,我很想寫寫關於數據通信時候所謂的“三次握手”,但之前的http協議基礎中已經介紹過,還不懂的可以去里面找找,其實就是數據的封裝

 

6、協議版本

目前我們使用的http協議版本是http1.1,其重點關注的是校正http設計中的結構性缺陷,明確語義,引入重要的性能優化措施,並刪除一些不好的特性

HTTP-NG(http2.0):是http1.1后繼結構的原型建議,重點關注性能的大幅優化,以及更強大的服務邏輯遠程執行框架

                   目前http2.0還在不斷商議中,可能被應用到的新技術預計有以下7種,不排除有重大更改的可能性

                   

 

7、web的結構組件

web的應用程序,除了瀏覽器和服務器之外,還有其他幾個很重要的組件(以前的博客中有介紹,所以這里就大致說下,后面具體解釋他們的功能用處)

7.1 代理:位於客戶端和服務器之間的http中間實體

web安全、應用集成以及性能優化的重要組成模塊

出於通信安全考慮,會將代理做為轉發所有web數據流的可信任中間節點使用,還可對請求響應進行過濾,后面詳細介紹

 

7.2 緩存:http倉庫,使常用頁面資源可以保存在離客戶端更近的地方

web緩存或者代理緩存,可以將經過代理傳送的常用的允許緩存的資源保存下來,下一個請求若有相同的資源,可直接享受該資源

http對緩存定義了很多功能,使緩存更高效,並規范了緩存資源的有效期和隱私性,后面詳細介紹

 

7.3 網關:連接其他應用程序的特殊web服務器

網關通常將http數據流轉換成其他的協議,接受請求時就好像自己是資源的源服務器,例如

一個http/ftp網關會http請求接受對ftp-URL的請求,但通過ftp協議來獲取資源,得到的資源被封裝成一條http報文,發送給客戶端

關於具體的網關的內容,后面詳細介紹

 

7.4 隧道:對http通信報文進行盲轉發的特殊http應用程序

隧道常用的方式是通過http連接承載加密的安全套接層(Secure Scokets Layer,SSL)數據流,這樣SSL數據流可以穿過只允許web數據流通過的防火牆

隧道可以在非http網絡上轉發數據(顯示的是HTTP/SSL隧道)

 

7.5 Agent代理:代表用戶發起自動http請求的半智能web客戶端程序

其他類型:對web上閑逛的自動用戶采用Agent代理,無人監視下發布http事務並獲取內容,比如:“網絡蜘蛛”、“網絡機器人”等

自動搜索引擎“網絡蜘蛛”就是Agent代理,可以全世界范圍內獲取web頁面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM