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