web前端常识之浏览器原理
一、HTTP協(xié)議定義
URL的組成
例如:http://www.alimama.com/membersvc/index.htm。它的含義如下:
- http://:代表超文本傳輸協(xié)議,通知baidu.com服務(wù)器顯示W(wǎng)eb頁(yè),通常不用輸入;
- www:代表一個(gè)Web(萬(wàn)維網(wǎng))服務(wù)器;
- alimama.com/:這是裝有網(wǎng)頁(yè)的服務(wù)器的域名,或站點(diǎn)服務(wù)器的名稱(chēng);
- membersvc/:為該服務(wù)器上的子目錄,就好像我們的文件夾;
- index.htm:index.htm是文件夾中的一個(gè)HTML文件(網(wǎng)頁(yè))。
HTTP 協(xié)議的基本特點(diǎn):
- 支持客戶 / 服務(wù)器模式。
- 簡(jiǎn)單快速 : 客戶向服務(wù)器請(qǐng)求服務(wù)時(shí) , 只需傳送請(qǐng)求方法和路徑 。 請(qǐng)求方法常用的有 GET 、 POST 。 每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類(lèi)型不同 。 由于 HTTP 協(xié)議簡(jiǎn)單 , 使得 HTTP 服務(wù)器的程序規(guī)模小,因而通信速度很快。
- 靈活: HTTP 允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象。正在傳輸?shù)念?lèi)型由 Content-Type 加以標(biāo)記。
- 無(wú)連接 : 無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求 。 服務(wù)器處理完客戶的請(qǐng)求 , 并收到客戶的應(yīng)答后,即斷開(kāi)連接。采用這種方式可以節(jié)省傳輸時(shí)間。
- 無(wú)狀態(tài): HTTP 協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面 , 在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。
Internet的基本協(xié)議是TCP/IP協(xié)議,然而在TCP/IP模型最上層的是應(yīng)用層(Application layer),它包含所有高層的協(xié)議。高層協(xié)議有:文件傳輸協(xié)議FTP、電子郵件傳輸協(xié)議SMTP、域名系統(tǒng)服務(wù)DNS、網(wǎng)絡(luò)新聞傳輸協(xié)議NNTP和HTTP協(xié)議等。
HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。它不僅保證計(jì)算機(jī)正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。
二、HTTP協(xié)議通信過(guò)程
當(dāng)我們?cè)跒g覽器的地址欄輸入“www.baidu.com”然后按回車(chē),這之后發(fā)生了什么事,我們直接看到的是打開(kāi)了對(duì)應(yīng)的網(wǎng)頁(yè),那么內(nèi)部客戶端和服務(wù)端是如何通信的呢?
基于HTTP協(xié)議的客戶/服務(wù)器模式的信息交換過(guò)程,它分四個(gè)過(guò)程:建立連接、發(fā)送請(qǐng)求信息、發(fā)送響應(yīng)信息、關(guān)閉連接。
四、實(shí)例分析HTTP通信
先介紹一個(gè)工具,HTTP Analyzer ,為一款實(shí)時(shí)分析 HTTP/HTTPS 數(shù)據(jù)流的工具。它可以實(shí)時(shí)捕捉HTTP/HTTPS 協(xié)議數(shù)據(jù),可以顯示許多信息(包括:文件頭、內(nèi)容、Cookie、查詢字符竄、提交的數(shù)據(jù)、重定向的URL地址),可以提供緩沖區(qū)信息、清理對(duì)話內(nèi)容、HTTP狀態(tài)信息和其他過(guò)濾選項(xiàng)。同時(shí)還是一個(gè)非常有用的分析、調(diào)試和診斷的開(kāi)發(fā)工具。
下面我們?cè)L問(wèn)http://www.google.cn/ ,HTTP analyzer將抓包來(lái)分析訪問(wèn)瀏覽器和服務(wù)器通信的過(guò)程。
1、 運(yùn)行HTTP Analyzer,選擇菜單Action—start開(kāi)始抓包;
2、 瀏覽器中輸入 http://www.google.cn/,網(wǎng)頁(yè)打開(kāi)后,在HTTP Analyzer中選擇Action—stop停止抓包;工具已經(jīng)詳細(xì)列出了訪問(wèn)的數(shù)據(jù)包信息。通過(guò)截圖見(jiàn)到了解下抓包信息。
抓包結(jié)果和文件頭信息(下圖)
一次請(qǐng)求的html正文內(nèi)容(下圖)
本次請(qǐng)求是否存在cookies信息(下圖)
一次請(qǐng)求的整個(gè)數(shù)據(jù)包信息,包括頭信息和正文(下圖)。
你會(huì)發(fā)現(xiàn)瀏覽器中只點(diǎn)擊了一個(gè)超級(jí)鏈接,卻發(fā)送了多個(gè)數(shù)據(jù)包。那是因?yàn)?我們請(qǐng)求的網(wǎng)頁(yè)文件中有很多圖片、音樂(lè)、電影等信息時(shí),服務(wù)器返回的信息中并不直接包含圖片數(shù)據(jù),而只是保存該圖片的鏈接,當(dāng)瀏覽器進(jìn)行解釋的時(shí)候,遇到圖片的url時(shí),才向服務(wù)器發(fā)出對(duì)圖片的請(qǐng)求信息。
下面我們來(lái)詳細(xì)分析HTTP的請(qǐng)求和響應(yīng)信息:
HTTP請(qǐng)求消息
當(dāng)客戶端和服務(wù)端建立TCP連接后,客戶端就會(huì)向服務(wù)器發(fā)送一個(gè)請(qǐng)求信息。http 請(qǐng)求由三部分組成,分別是:請(qǐng)求行、消息報(bào)頭、請(qǐng)求正文,如:
[1]GET / HTTP/1.1
[2]Accept: image/gif, image/x-xbitmap, imag
e/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* 客戶端可識(shí)別的內(nèi)容類(lèi)型列表。
[3]Accept-Language: zh-cn 客戶端所能解釋的語(yǔ)言:簡(jiǎn)體中文
[4]UA-CPU: x86
[5]Accept-Encoding: gzip, deflate 客戶端可以解釋的類(lèi)型
[6]User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.1; CIBA) 客戶端瀏覽器型號(hào)
[7]Host: http://www.google.cn/ 提交請(qǐng)求頁(yè)面
[8]Connection: Keep-Alive TCP連接保持打開(kāi)
[9]
該請(qǐng)求信息主要由4部分組成:
請(qǐng)求方法URI協(xié)議/版本:以上代碼第[1]行“GET”表示請(qǐng)求方法,,“HTTP/1.1代表協(xié)議和協(xié)議的版本,HTTP請(qǐng)求可以使用多種請(qǐng)求方法,最常用的為GET和POST方法
請(qǐng)求報(bào)頭:[2]-[8]行,包含許多有關(guān)客戶端環(huán)境和請(qǐng)求正文的有用信息。
空行 :[9] 請(qǐng)求報(bào)頭和請(qǐng)求正文之間是一個(gè)空行,這個(gè)行非常重要,表示請(qǐng)求報(bào)頭已經(jīng)結(jié)束,接下來(lái)是正文,這個(gè)行非常重要,它表示請(qǐng)求報(bào)頭已經(jīng)結(jié)束,接下來(lái)是請(qǐng)求正文。
請(qǐng)求正文:請(qǐng)求正文中可以包含客戶提交的查詢字符串信息,如用戶名和密碼等。這里沒(méi)有。
這里有一點(diǎn)值得說(shuō)明的是:請(qǐng)求方法中的GET和POST方法;
GET方法是默認(rèn)的HTTP請(qǐng)求方法,我們?nèi)粘S肎ET方法來(lái)提交表單數(shù)據(jù),然而用GET方法提交的表單數(shù)據(jù)只經(jīng)過(guò)了簡(jiǎn)單的編碼,同時(shí)它將作為URL的一部分向Web服務(wù)器發(fā)送,因此,如果使用GET方法來(lái)提交表單數(shù)據(jù)就存在著安全隱患上,同時(shí)這個(gè)URL長(zhǎng)度還有限制,不允許超過(guò)1k。
POST方法是GET方法的一個(gè)替代方法,它主要是向Web服務(wù)器提交表單數(shù)據(jù),尤其是大批量的數(shù)據(jù)。POST方法克服了GET方法的一些缺點(diǎn)。通過(guò)POST方法提交表單數(shù)據(jù)時(shí),數(shù)據(jù)不是作為URL請(qǐng)求的一部分而是作為標(biāo)準(zhǔn)數(shù)據(jù)傳送給Web服務(wù)器,這就克服了GET方法中的信息無(wú)法保密和數(shù)據(jù)量太小的缺點(diǎn)。因此,出于安全的考慮以及對(duì)用戶隱私的尊重,通常表單提交時(shí)采用POST方法。
HTTP響應(yīng)消息
響應(yīng)跟請(qǐng)求類(lèi)似,HTTP 響應(yīng)也是由三個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、響應(yīng)正文,如:
[1]HTTP/1.1 200 OK
[2]Cache-Control: private, max-age=0
[3]Date: Fri, 27 Feb 2009 07:53:36 GMT
[4]Expires: -1
[5]Content-Type: text/html; charset=UTF-8
[6]Set-Cookie: PREF=ID=cc4a31ab6792ef2c:NW=1:TM=1235721216:LM=1235721216:S=q1hQBu-1KdamAWK-; expires=Sun, 27-Feb-2011 07:53:36 GMT; path=/; domain=.google.cn
[7]Cont
ent-Encoding: gzip
[8]Server: gws
[9]Transfer-Encoding: chunked
[10]
[11]ddc
該響應(yīng)信息也以對(duì)應(yīng)的4部分組成:
協(xié)議狀態(tài)描述,HTTP/1.1表示協(xié)議版本,200 OK表示服務(wù)器已經(jīng)成功處理了客戶端發(fā)出的請(qǐng)求。200表示HTTP的應(yīng)答碼成功。HTTP應(yīng)答碼由3位數(shù)字構(gòu)成,其中首位數(shù)字定義了應(yīng)答碼的類(lèi)型:
1XX-信息類(lèi)(Information),表示收到Web瀏覽器請(qǐng)求,正在進(jìn)一步的處理中
2XX-成功類(lèi)(Successful),表示用戶請(qǐng)求被正確接收,理解和處理例如:200 OK
3XX-重定向類(lèi)(Redirection),表示請(qǐng)求沒(méi)有成功,客戶必須采取進(jìn)一步的動(dòng)作。
4XX-客戶端錯(cuò)誤(Client Error),表示客戶端提交的請(qǐng)求有錯(cuò)誤 例如:404 NOT Found,意味著請(qǐng)求中所引用的文檔不存在。
5XX-服務(wù)器錯(cuò)誤(Server Error)表示服務(wù)器不能完成對(duì)請(qǐng)求的處理:如 500
響應(yīng)報(bào)頭:跟請(qǐng)求報(bào)頭一樣,它指出服務(wù)器的功能,標(biāo)識(shí)出響應(yīng)數(shù)據(jù)的細(xì)節(jié)。
空行:也是屬于響應(yīng)報(bào)頭和響應(yīng)正文之間必須存在的一個(gè)空行,表示響應(yīng)報(bào)頭結(jié)束,接下來(lái)是響應(yīng)正文
響應(yīng)正文:也就是服務(wù)器返回的網(wǎng)頁(yè)內(nèi)容。
根據(jù)上文的描述,再結(jié)合工具實(shí)際驗(yàn)證一回,相信應(yīng)該能對(duì)HTTP協(xié)議和其通信流程有個(gè)大致的了解。
五、擴(kuò)展知識(shí)
高層協(xié)議有:文件傳輸協(xié)議 FTP 、電子郵件傳輸協(xié)議 SMTP 、域名系統(tǒng)服務(wù) DNS 、網(wǎng)絡(luò)新聞傳輸協(xié)議NNTP 和 HTTP 協(xié)議等。
中介由三種:代理 (Proxy) 、網(wǎng)關(guān) (Gateway) 和通道 (Tunnel) ,一個(gè)代理根據(jù) URI 的絕對(duì)格式來(lái)接受請(qǐng)求,重寫(xiě)全部或部分消息,通過(guò) URI 的標(biāo)識(shí)把已格式化過(guò)的請(qǐng)求發(fā)送到服務(wù)器。網(wǎng)關(guān)是一個(gè)接收代理,作為一些其它服務(wù)器的上層,并且如果必須的話,可以把請(qǐng)求翻譯給下層的服務(wù)器協(xié)議。一個(gè)通道作為不改變消息的兩個(gè)連接之間的中繼點(diǎn) 。 當(dāng)通訊需要通過(guò)一個(gè)中介 ( 例如 : 防火墻等 ) 或者是中介不能識(shí)別消息的內(nèi)容時(shí),通道經(jīng)常被使用。
- 代理 (Proxy):一個(gè)中間程序 , 它可以充當(dāng)一個(gè)服務(wù)器 , 也可以充當(dāng)一個(gè)客戶機(jī) , 為其它客戶機(jī)建立請(qǐng)求。請(qǐng)求是通過(guò)可能的翻譯在內(nèi)部或經(jīng)過(guò)傳遞到其它的 服務(wù)器中。一個(gè)代理在發(fā)送請(qǐng)求信息之前,必須解釋并且如果可能重寫(xiě)它 。 代理經(jīng)常作為通過(guò)防火墻的客戶機(jī)端的門(mén)戶 , 代理還可以作為一個(gè)幫助應(yīng)用來(lái)通過(guò)協(xié)議處理沒(méi)有被用戶代理完成的請(qǐng)求。
- 網(wǎng)關(guān) (Gateway):一個(gè)作為其它服務(wù)器中間媒介的服務(wù)器。與代理不同的是,網(wǎng)關(guān)接受請(qǐng)求就好象對(duì)被請(qǐng)求的資源來(lái)說(shuō)它就是源服務(wù)器;發(fā)出請(qǐng)求的客戶機(jī)并沒(méi)有意識(shí)到它在同網(wǎng)關(guān)打交道。 網(wǎng)關(guān)經(jīng)常作為通過(guò)防火墻的服務(wù)器端的門(mén)戶 , 網(wǎng)關(guān)還可以作為一個(gè)協(xié)議翻譯器以便存取那些存儲(chǔ)在非HTTP 系統(tǒng)中的資源。
- 通道 (Tunnel):是作為兩個(gè)連接中繼的中介程序。一旦激活,通道便被認(rèn)為不屬于 HTTP 通訊,盡管通道可能是被一 個(gè) HTT P 請(qǐng)求初始化的 。 當(dāng)被中繼的連接兩端關(guān)閉時(shí),通道便消失 。 當(dāng)一個(gè)門(mén)戶 (Portal)必須存在或中介 (Intermediary) 不能解釋中繼的通訊時(shí)通道被經(jīng)常使用。
轉(zhuǎn)載于:https://www.cnblogs.com/hnrainll/archive/2011/09/19/2180961.html
總結(jié)
以上是生活随笔為你收集整理的web前端常识之浏览器原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GEE windows 环境配置
- 下一篇: python数组排序(递归实现)