HTTP協議詳細介紹

我們日常生活中經常會使用瀏覽器訪問Web站點這個過程中到底發生瞭什麼嗎?為什麼我們在瀏覽器地址欄上面輸入要訪問的URL後就可以訪問到Web頁面呢?這幾乎是面試過程中的高頻問題。

簡單來說,當我們在瀏覽器地址欄上輸入要訪問的URL後,瀏覽器會分析出URL上面的域名,然後通過DNS服務器查詢出域名映射的IP地址,瀏覽器根據查詢到的IP地址與Web服務器進行通信,而通信的協議就是HTTP協議,以下就給大傢詳細介紹HTTP協議。

一、HTTP簡介

1、簡介

HTTP超文本傳輸協議(HyperText Transfer Protocol)是一種用於分佈式、協作式和超媒體信息系統的應用層協議。HTTP是萬維網的數據通信的基礎。是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展,目前在WWW中使用的是HTTP/1.0的第六版。

2、HTTP協議特點

HTTP協議的主要特點可概括如下:

  • 1.支持客戶/服務器模式。
  • 2.簡單快速:客戶向服務器請求服務時,隻需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定 瞭客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
  • 3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
  • 4.無連接:無連接的含義是限制每次連接隻處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。采用這種方式可以節省傳輸時間。
  • 5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

3、作用

我們可以把這個HTTP通信過程類比成一個電話對話。當我們要打電話給某個人,首先要知道對方的電話號碼,然後進行撥號。打通電話後我們會進行對話,當然要對話肯定需要共同的語言,如果一個人說國語,而另一個人說英語,那肯定不能進行溝通。電話號碼相當於上面的IP地址,而共同語言相當於HTTP協議。

4、工作原理

(1) 客戶端連接到Web服務器

一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認為80)建立一個TCP套接字連接。例如,http://www.oakcms.cn。 

(2) 發送HTTP請求

通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。

(3) 服務器接受請求並返回HTTP響應

Web服務器解析請求,定位請求資源。服務器將資源復本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。

(4) 釋放連接TCP連接

若connection 模式為close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;

(5) 客戶端瀏覽器解析HTML內容

客戶端瀏覽器首先解析狀態行,查看表明請求是否成功的狀態代碼。然後解析每一個響應頭,響應頭告知以下為若幹字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。

二、HTTP協議介紹

1、HTTP協議之URI

HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。URL是一種特殊類型的URI,包含瞭用於查找某個資源的足夠的信息

URL,全稱是Uniform Resource Locator, 中文叫統一資源定位符,是互聯網上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

從上面的URL可以看出,一個完整的URL包括以下幾部分:

1.協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的“//”為分隔符

2.域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用 

3.端口部分:跟在域名後面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認端口

4.虛擬目錄部分:從域名後的第一個“/”開始到最後一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”

5.文件名部分:從域名後的最後一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名

6.錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分

7.參數部分:從“?”開始到“#”為止之間的部分為參數部分,又稱搜索部分、查詢部分。本例中的參數部分為“boardID=5&ID=24618&page=1”。參數可以允許有多個參數,參數與參數之間用“&”作為分隔符。

2、HTTP協議之請求

組成:

1.請求行

2.若幹“頭部行”

3.實體主體(通常不用)

第一部分:請求行

GET /js/an.js HTTP/1.1               

GET說明請求類型為GET,[js/an.js]為要訪問的資源,該行的最後一部分說明使用的是HTTP1.1版本。

第二部分:請求頭部

Accept: */*                                    #可接受的媒體類型    

Accept-Encoding: gzip, deflate    #可接受的編碼    

Accept-Language: zh-cn              #接受的語言    

Connection: Keep-Alive               #持久連接    

Host: cache.soso.com                 #Host    

Referer: http://help.soso.com/     #引用頁面    

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; InfoPath.2)          #用戶代理

註意:實體主體沒有,也必須要有空行。

3、HTTP協議之響應

(1)響應報文結構

在接收和解釋請求消息後,服務器返回一個HTTP響應消息。

響應報文的開始行是狀態行:狀態行包括三項內容,即 HTTP 的版本,狀態碼,以及解釋狀態碼的簡單短語。

HTTP響應也是由三個部分組成,分別是:狀態行、頭部行、響應正文。

(2)狀態碼    

狀態代碼有三位數字組成,第一個數字定義瞭響應的類別,且有五種可能取值: 

1xx :表示通知信息的,如請求收到瞭或正在進行處理。

2xx:表示成功,如接受或知道瞭。

3xx :表示重定向,表示要完成請求還必須采取進一步的行動。

4xx :表示客戶端的差錯,如請求中有錯誤的語法或不能完成。

5xx :表示服務器的差錯,如服務器失效無法完成請求。

(3)常見狀態碼      

200 OK  //客戶端請求成功

400 Bad Request  //客戶端請求有語法錯誤,不能被服務器所理解

401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用

403 Forbidden //服務器收到請求,但是拒絕提供服務

404 Not Found //請求資源不存在,eg:輸入瞭錯誤的URL

500 Internal Server Error  //服務器發生不可預期的錯誤

503 Server Unavailable  //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

三、HTTP連接類型

1、連接類型

HTTP既可以使用非持久連接(nonpersistent connection),也可以使用持久連接(persistent connection)。HTTP/1.0使用非持久連接,HTTP/1.1默認使用持久連接。     

持久連接情況下,服務器在發出響應後讓TCP連接繼續打開著。同一對客戶/服務器之間的後續請求和響應可以通過這個連接發送。

持久連接分為不帶流水線(without pipelining)和帶流水線(with pipelining)兩個版本。如果是不帶流水線的版本,那麼客戶隻在收到前一個請求的響應後才發出新的請求。

2、區別

流水線方式和非流水線方式的區別:

  • 流水線方式指沒有收到上一個請求的對象就發送新的對象的請求

  • 非流水線方式指必須要等到上一個請求的對象到達之後再發送新的對象的請求

到此這篇關於HTTP協議的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: