系統(tǒng)運維
一.概述
http(hyper text transfer protocol),超文本傳輸協(xié)議,是一種建立在tcp上的無狀態(tài)連接,整個工作流程基本是由客戶端(client)向服務(wù)端(server)發(fā)送一個http請求,向server端請求需要的資源,到server端收到客戶端的請求后,根據(jù)請求做出相應(yīng)的動作訪問服務(wù)器資源,然后通過http相應(yīng)將結(jié)果返回給client端。
http工作流程
瀏覽器向 dns 服務(wù)器請求解析該 url 中的域名所對應(yīng)的 ip 地址;
解析出 ip 地址后,根據(jù)該 ip 地址和默認端口 80,和服務(wù)器建立tcp連接;
瀏覽器發(fā)出讀取文件(url 中域名后面部分對應(yīng)的文件)的http 請求,該請求報文作為 tcp 三次握手的第三個報文的數(shù)據(jù)發(fā)送給服務(wù)器;
服務(wù)器對瀏覽器請求作出響應(yīng),并把對應(yīng)的html文本發(fā)送給瀏覽器;
釋放tcp連接;
瀏覽器顯示html文本;
http版本
0.9版本:僅支持html頁面(已被淘汰);1.0版本: (1)引入mime(多用途互聯(lián)網(wǎng)郵件擴展)機制,引入這個機制之后就可以發(fā)送多媒體信息; (2)引入keep-alive機制,支持持久鏈接的功能(但這個keep-alive原理是在首部添加了某個字段而形成,并非原生就支持此功能); (3)引入支持緩存頁面功能;1.1版本:1.0版本的升級,支持更多的請求連接方式、優(yōu)化可持久鏈接、優(yōu)化了頁面緩存;2.0版本:提供了http語義優(yōu)化的傳輸,增加了一個spdy技術(shù)。spdy技術(shù):google引入的一個技術(shù),能夠加速http數(shù)據(jù)交互,尤其是使用了ssl加速機制;被人們普遍稱為https協(xié)議;常見的網(wǎng)頁頁面類型
靜態(tài)頁面:常見的后綴名是:文本:html、htm、txt、css、doc;圖片:gif、jpg、png;視頻:mp4、flv;請求過程
socket是在應(yīng)用層和傳輸層之間的一個抽象層,socket本質(zhì)是編程接口(api),它把tcp/ip層復(fù)雜的操作抽象為幾個簡單的接口供應(yīng)用層調(diào)用以實現(xiàn)進程在網(wǎng)絡(luò)中通信。tcp/ip只是一個協(xié)議棧,必須要具體實現(xiàn),同時還要提供對外的操作接口(api),這就是socket接口。通過socket,我們才能使用tcp/ip協(xié)議。
①web客戶端向內(nèi)核注冊socket;
②客戶端通過瀏覽器,向web服務(wù)器發(fā)送數(shù)據(jù)請求;
③web服務(wù)端收到客戶端的請求信息;
④如果客戶端請求的資源在服務(wù)器本地,http服務(wù)會向系統(tǒng)內(nèi)核申請調(diào)用;
⑤內(nèi)核調(diào)用本地磁盤里的數(shù)據(jù),并經(jīng)數(shù)據(jù)發(fā)送給服務(wù)器;
⑥http將用戶請求的資源通過響應(yīng)報文,最終響應(yīng)客戶端;
特點:由開發(fā)人員預(yù)先編寫好,存放在當前文件系統(tǒng)中,響應(yīng)速度快、頁面維護比較麻煩,數(shù)據(jù)交互性差、容易被搜索引擎收錄
動態(tài)頁面:
常見的后綴名有:php、jsp、asp、net
請求過程:
與靜態(tài)頁面不同的就是,如果用戶請求的是動態(tài)內(nèi)容,那么此時http服務(wù)器就會調(diào)用后端的解釋器,由后端的解釋器在磁盤中獲取數(shù)據(jù),通過解釋器運行生成html格式的文件。然后構(gòu)建成響應(yīng)報文,最終響應(yīng)客戶端的請求。
特點:web服務(wù)器自身不支持動態(tài)頁面的處理,需要有專門的解釋器來進行完成,頁面數(shù)據(jù)多變,頁面維護比較簡單,響應(yīng)速度慢、數(shù)據(jù)有交互性,頁面訪問時包含特殊符號?、%%u3001&(特殊符號),不能被搜索引擎收錄;
偽靜態(tài)頁面:將動態(tài)頁面?zhèn)窝b成靜態(tài)頁面,被搜索引擎收錄,消耗硬件資源;
http協(xié)議的報文
request message(請求報文):客戶端→服務(wù)器端
由客戶端向服務(wù)器端發(fā)出請求,不同的網(wǎng)站用于請求不同的資源(html文檔)
請求報文格式:
請求行:用來標識客戶端請求的資源時,使用的請求方法、請求資源、請求的協(xié)議是什么,它們直接使用“空格”進行分隔;請求首部:作用是通過客戶端請求的相關(guān)內(nèi)容告知服務(wù)器端(首部可以不止一個)空白行:請求首部之后會有一個空白行,通過發(fā)送回車字符和換行字符,用于通知服務(wù)端以下內(nèi)容將不會再出現(xiàn)請求首部的信息;請求實體:請求的頁面的內(nèi)容具體是什么response message(響應(yīng)報文):服務(wù)器端→客戶端服務(wù)器響應(yīng)客戶端的請求;響應(yīng)報文:
起始行:響應(yīng)時采用的http協(xié)議的版本、響應(yīng)的狀態(tài)碼、狀態(tài)碼的簡略信息;
響應(yīng)首部:類似于請求報文,起始行后面一般有若干個頭部字段。每個頭部字段都包含一個名字和一個值,兩者用冒號進行分隔,可以包含一個或多個。
空白行:最后一個響應(yīng)首部信息之后就是一個空行,通過發(fā)送回車符和換行符,通知客戶端空行下無首部信息;
響應(yīng)實體:真正訪問頁面包含的內(nèi)容;
http請求方法
在http通信過程中,每個http請求報文中都會包含一個http請求方法,用于告知客戶端向服務(wù)器端請求執(zhí)行某些具體的操作。
常見的http請求方式:get、post、head
http狀態(tài)碼
二.http工作原理
http協(xié)議定義web客戶端如何從web服務(wù)器請求web頁面,以及服務(wù)器如何把web頁面?zhèn)魉徒o客戶端。http協(xié)議采用了請求/響應(yīng)模型。客戶端向服務(wù)器發(fā)送一個請求報文,請求報文包含請求的方法、url、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務(wù)器以一個狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、成功或者錯誤代碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)
http 請求/響應(yīng)的步驟:
客戶端連接到web服務(wù)器->發(fā)送http請求->服務(wù)器接受請求并返回http響應(yīng)->釋放連接tcp連接->客戶端瀏覽器解析html內(nèi)容
1、客戶端連接到web服務(wù)器
一個http客戶端,通常是瀏覽器,與web服務(wù)器的http端口(默認為80)建立一個tcp套接字連接。例如,http://www.baidu.com
2、發(fā)送http請求
通過tcp套接字,客戶端向web服務(wù)器發(fā)送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數(shù)據(jù)4部分組成。
3、服務(wù)器接受請求并返回http響應(yīng)
web服務(wù)器解析請求,定位請求資源。服務(wù)器將資源復(fù)本寫到tcp套接字,由客戶端讀取。一個響應(yīng)由狀態(tài)行、響應(yīng)頭部、空行和響應(yīng)數(shù)據(jù)4部分組成。
4、釋放連接tcp連接
若connection 模式為close,則服務(wù)器主動關(guān)閉tcp連接,客戶端被動關(guān)閉連接,釋放tcp連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內(nèi)可以繼續(xù)接收請求;
5、客戶端瀏覽器解析html內(nèi)容
客戶端瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。然后解析每一個響應(yīng)頭,響應(yīng)頭告知以下為若干字節(jié)的html文檔和文檔的字符集??蛻舳藶g覽器讀取響應(yīng)數(shù)據(jù)html,根據(jù)html的語法對其進行格式化,并在瀏覽器窗口中顯示。
三.url.uri.urn
uriuri一般由三部組成:①訪問資源的命名機制②存放資源的主機名③資源自身的名稱,由路徑表示,著重強調(diào)于資源。url采用url可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件、服務(wù)器的地址和目錄等。url一般由三部組成:①協(xié)議(或稱為服務(wù)方式)②存有該資源的主機ip地址(有時也包括端口號)③主機資源的具體地址。如目錄和文件名等urn,uniform resource name,統(tǒng)一資源命名,是通過名字來標識資源,uri是以一種抽象的,高層次概念定義統(tǒng)一資源標識,而url和urn則是具體的資源標識的方式。url和urn都是一種uri。籠統(tǒng)地說,每個 url 都是 uri,但不一定每個 uri 都是 url。這是因為 uri 還包括一個子類,即統(tǒng)一資源名稱 (urn),它命名資源但不指定如何定位資源。上面的 mailto、news 和 isbn uri 都是 urn 的示例。http事務(wù)、
包含一個http請求,和對應(yīng)請求的響應(yīng)就叫做一個http事務(wù),也可以理解http事務(wù)就是一個完整的http請求和http響應(yīng)的過程。
http協(xié)議默認情況下每個事務(wù)都會打開和關(guān)閉一個新的連接,所以相當耗費時間和帶寬,由于tcp慢啟動特性,所以每條新的連接的性能本身就會有所降低,所以可打開的并行連接的數(shù)量上限是有限的。所以使用持久連接這種模式比默認情況下不使用持久連接的方式會好一點,他的好處表現(xiàn)在其請求和tcp斷開的過程所消耗的時間會被減少