HTTP詳細介紹

一.概述

  • HTTP(Hyper Text Transfer Protocol),超文本傳輸協議,是一種建立在TCP上的無狀態連接,整個工作流程基本是由客戶端(client)向服務端(server)發送一個http請求,向server端請求需要的資源,到server端收到客戶端的請求後,根據請求做出相應的動作訪問服務器資源,然後通過HTTP相應將結果返回給client端。

  • HTTP工作流程
  1. 瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
  2. 解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器建立TCP連接;
  3. 瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文作爲 TCP 三次握手的第三個報文的數據發送給服務器;
  4. 服務器對瀏覽器請求作出響應,並把對應的html文本發送給瀏覽器;
  5. 釋放TCP連接;
  6. 瀏覽器顯示html文本;
  • http版本
0.9版本:僅支持html頁面(已被淘汰);
1.0版本:
      (1)引入MIME(多用途互聯網郵件擴展)機制,引入這個機制之後就可以發送多媒體信息;
            (2)引入keep-alive機制,支持持久鏈接的功能(但這個keep-alive原理是在首部添加了某個字段而形成,並非原生就支持此功能);
            (3)引入支持緩存頁面功能;
1.1版本:1.0版本的升級,支持更多的請求連接方式、優化可持久鏈接、優化了頁面緩存;
2.0版本:提供了http語義優化的傳輸,增加了一個spdy技術。Spdy技術:google引入的一個技術,能夠加速http數據交互,尤其是使用了ssl加速機制;被人們普遍稱爲https協議;
  • 常見的網頁頁面類型
靜態頁面:
常見的後綴名是:
文本:html、htm、txt、css、doc;
圖片:gif、jpg、png;
視頻:mp4、flv;

請求過程

HTTP詳細介紹

socket是在應用層和傳輸層之間的一個抽象層,socket本質是編程接口(API),它把TCP/IP層複雜的操作抽象爲幾個簡單的接口供應用層調用以實現進程在網絡中通信。TCP/IP只是一個協議棧,必須要具體實現,同時還要提供對外的操作接口(API),這就是Socket接口。通過Socket,我們才能使用TCP/IP協議。

①Web客戶端向內核註冊socket;
②客戶端通過瀏覽器,向Web服務器發送數據請求;
③Web服務端收到客戶端的請求信息;
④如果客戶端請求的資源在服務器本地,http服務會向系統內核申請調用;
⑤內核調用本地磁盤裏的數據,並經數據發送給服務器;
⑥http將用戶請求的資源通過響應報文,最終響應客戶端;

特點:由開發人員預先編寫好,存放在當前文件系統中,響應速度快、頁面維護比較麻煩,數據交互性差、容易被搜索引擎收錄

動態頁面:

常見的後綴名有:php、jsp、asp、net

  • 請求過程:
    HTTP詳細介紹

與靜態頁面不同的就是,如果用戶請求的是動態內容,那麼此時http服務器就會調用後端的解釋器,由後端的解釋器在磁盤中獲取數據,通過解釋器運行生成html格式的文件。然後構建成響應報文,最終響應客戶端的請求。

特點:web服務器自身不支持動態頁面的處理,需要有專門的解釋器來進行完成,頁面數據多變,頁面維護比較簡單,響應速度慢、數據有交互性,頁面訪問時包含特殊符號?、%、&(特殊符號),不能被搜索引擎收錄;

僞靜態頁面:將動態頁面僞裝成靜態頁面,被搜索引擎收錄,消耗硬件資源;

  • http協議的報文
    request Message(請求報文):客戶端→服務器端
    由客戶端向服務器端發出請求,不同的網站用於請求不同的資源(html文檔)

請求報文格式:
HTTP詳細介紹

HTTP詳細介紹

請求行:用來標識客戶端請求的資源時,使用的請求方法、請求資源、請求的協議是什麼,它們直接使用“空格”進行分隔;

請求首部:作用是通過客戶端請求的相關內容告知服務器端(首部可以不止一個)

空白行:請求首部之後會有一個空白行,通過發送回車字符和換行字符,用於通知服務端以下內容將不會再出現請求首部的信息;

請求實體:請求的頁面的內容具體是什麼

Response Message(響應報文):服務器端→客戶端
服務器響應客戶端的請求;

響應報文:
HTTP詳細介紹

HTTP詳細介紹

起始行:響應時採用的http協議的版本、響應的狀態碼、狀態碼的簡略信息;
響應首部:類似於請求報文,起始行後面一般有若干個頭部字段。每個頭部字段都包含一個名字和一個值,兩者用冒號進行分隔,可以包含一個或多個。
空白行:最後一個響應首部信息之後就是一個空行,通過發送回車符和換行符,通知客戶端空行下無首部信息;
響應實體:真正訪問頁面包含的內容;

  • HTTP請求方法
    在HTTP通信過程中,每個HTTP請求報文中都會包含一個HTTP請求方法,用於告知客戶端向服務器端請求執行某些具體的操作。

常見的HTTP請求方式:GET、POST、HEAD

HTTP詳細介紹

  • HTTP狀態碼

HTTP詳細介紹
HTTP詳細介紹

HTTP詳細介紹
HTTP詳細介紹

HTTP詳細介紹

二.HTTP工作原理

HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行作爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據

  • HTTP 請求/響應的步驟:

客戶端連接到Web服務器->發送Http請求->服務器接受請求並返回HTTP響應->釋放連接TCP連接->客戶端瀏覽器解析HTML內容

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

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

3、服務器接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
4、釋放連接TCP連接
若connection 模式爲close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式爲keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;

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

三.URL.URI.URN

URI

URI一般由三部組成:
①訪問資源的命名機制
②存放資源的主機名
③資源自身的名稱,由路徑表示,着重強調於資源。

URL

採用URL可以用一種統一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。URL一般由三部組成:
①協議(或稱爲服務方式)
②存有該資源的主機IP地址(有時也包括端口號)
③主機資源的具體地址。如目錄和文件名等

URN,uniform resource name,統一資源命名,是通過名字來標識資源,

URI是以一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。籠統地說,每個 URL 都是 URI,但不一定每個 URI 都是 URL。這是因爲 URI 還包括一個子類,即統一資源名稱 (URN),它命名資源但不指定如何定位資源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。
  • http事務

包含一個HTTP請求,和對應請求的響應就叫做一個http事務,也可以理解http事務就是一個完整的HTTP請求和HTTP響應的過程。

HTTP協議默認情況下每個事務都會打開和關閉一個新的連接,所以相當耗費時間和帶寬,由於TCP慢啓動特性,所以每條新的連接的性能本身就會有所降低,所以可打開的並行連接的數量上限是有限的。所以使用持久連接這種模式比默認情況下不使用持久連接的方式會好一點,他的好處表現在其請求和tcp斷開的過程所消耗的時間會被減少

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