web前端常识之浏览器原理
一、HTTP協議定義
URL的組成
例如:http://www.alimama.com/membersvc/index.htm。它的含義如下:
- http://:代表超文本傳輸協議,通知baidu.com服務器顯示Web頁,通常不用輸入;
- www:代表一個Web(萬維網)服務器;
- alimama.com/:這是裝有網頁的服務器的域名,或站點服務器的名稱;
- membersvc/:為該服務器上的子目錄,就好像我們的文件夾;
- index.htm:index.htm是文件夾中的一個HTML文件(網頁)。
HTTP 協議的基本特點:
- 支持客戶 / 服務器模式。
- 簡單快速 : 客戶向服務器請求服務時 , 只需傳送請求方法和路徑 。 請求方法常用的有 GET 、 POST 。 每種方法規定了客戶與服務器聯系的類型不同 。 由于 HTTP 協議簡單 , 使得 HTTP 服務器的程序規模小,因而通信速度很快。
- 靈活: HTTP 允許傳輸任意類型的數據對象。正在傳輸的類型由 Content-Type 加以標記。
- 無連接 : 無連接的含義是限制每次連接只處理一個請求 。 服務器處理完客戶的請求 , 并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
- 無狀態: HTTP 協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面 , 在服務器不需要先前信息時它的應答就較快。
Internet的基本協議是TCP/IP協議,然而在TCP/IP模型最上層的是應用層(Application layer),它包含所有高層的協議。高層協議有:文件傳輸協議FTP、電子郵件傳輸協議SMTP、域名系統服務DNS、網絡新聞傳輸協議NNTP和HTTP協議等。
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先于圖形)等。
二、HTTP協議通信過程
當我們在瀏覽器的地址欄輸入“www.baidu.com”然后按回車,這之后發生了什么事,我們直接看到的是打開了對應的網頁,那么內部客戶端和服務端是如何通信的呢?
基于HTTP協議的客戶/服務器模式的信息交換過程,它分四個過程:建立連接、發送請求信息、發送響應信息、關閉連接。
四、實例分析HTTP通信
先介紹一個工具,HTTP Analyzer ,為一款實時分析 HTTP/HTTPS 數據流的工具。它可以實時捕捉HTTP/HTTPS 協議數據,可以顯示許多信息(包括:文件頭、內容、Cookie、查詢字符竄、提交的數據、重定向的URL地址),可以提供緩沖區信息、清理對話內容、HTTP狀態信息和其他過濾選項。同時還是一個非常有用的分析、調試和診斷的開發工具。
下面我們訪問http://www.google.cn/ ,HTTP analyzer將抓包來分析訪問瀏覽器和服務器通信的過程。
1、 運行HTTP Analyzer,選擇菜單Action—start開始抓包;
2、 瀏覽器中輸入 http://www.google.cn/,網頁打開后,在HTTP Analyzer中選擇Action—stop停止抓包;工具已經詳細列出了訪問的數據包信息。通過截圖見到了解下抓包信息。
抓包結果和文件頭信息(下圖)
一次請求的html正文內容(下圖)
本次請求是否存在cookies信息(下圖)
一次請求的整個數據包信息,包括頭信息和正文(下圖)。
你會發現瀏覽器中只點擊了一個超級鏈接,卻發送了多個數據包。那是因為,我們請求的網頁文件中有很多圖片、音樂、電影等信息時,服務器返回的信息中并不直接包含圖片數據,而只是保存該圖片的鏈接,當瀏覽器進行解釋的時候,遇到圖片的url時,才向服務器發出對圖片的請求信息。
下面我們來詳細分析HTTP的請求和響應信息:
HTTP請求消息
當客戶端和服務端建立TCP連接后,客戶端就會向服務器發送一個請求信息。http 請求由三部分組成,分別是:請求行、消息報頭、請求正文,如:
[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, */* 客戶端可識別的內容類型列表。
[3]Accept-Language: zh-cn 客戶端所能解釋的語言:簡體中文
[4]UA-CPU: x86
[5]Accept-Encoding: gzip, deflate 客戶端可以解釋的類型
[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) 客戶端瀏覽器型號
[7]Host: http://www.google.cn/ 提交請求頁面
[8]Connection: Keep-Alive TCP連接保持打開
[9]
該請求信息主要由4部分組成:
請求方法URI協議/版本:以上代碼第[1]行“GET”表示請求方法,,“HTTP/1.1代表協議和協議的版本,HTTP請求可以使用多種請求方法,最常用的為GET和POST方法
請求報頭:[2]-[8]行,包含許多有關客戶端環境和請求正文的有用信息。
空行 :[9] 請求報頭和請求正文之間是一個空行,這個行非常重要,表示請求報頭已經結束,接下來是正文,這個行非常重要,它表示請求報頭已經結束,接下來是請求正文。
請求正文:請求正文中可以包含客戶提交的查詢字符串信息,如用戶名和密碼等。這里沒有。
這里有一點值得說明的是:請求方法中的GET和POST方法;
GET方法是默認的HTTP請求方法,我們日常用GET方法來提交表單數據,然而用GET方法提交的表單數據只經過了簡單的編碼,同時它將作為URL的一部分向Web服務器發送,因此,如果使用GET方法來提交表單數據就存在著安全隱患上,同時這個URL長度還有限制,不允許超過1k。
POST方法是GET方法的一個替代方法,它主要是向Web服務器提交表單數據,尤其是大批量的數據。POST方法克服了GET方法的一些缺點。通過POST方法提交表單數據時,數據不是作為URL請求的一部分而是作為標準數據傳送給Web服務器,這就克服了GET方法中的信息無法保密和數據量太小的缺點。因此,出于安全的考慮以及對用戶隱私的尊重,通常表單提交時采用POST方法。
HTTP響應消息
響應跟請求類似,HTTP 響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文,如:
[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
該響應信息也以對應的4部分組成:
協議狀態描述,HTTP/1.1表示協議版本,200 OK表示服務器已經成功處理了客戶端發出的請求。200表示HTTP的應答碼成功。HTTP應答碼由3位數字構成,其中首位數字定義了應答碼的類型:
1XX-信息類(Information),表示收到Web瀏覽器請求,正在進一步的處理中
2XX-成功類(Successful),表示用戶請求被正確接收,理解和處理例如:200 OK
3XX-重定向類(Redirection),表示請求沒有成功,客戶必須采取進一步的動作。
4XX-客戶端錯誤(Client Error),表示客戶端提交的請求有錯誤 例如:404 NOT Found,意味著請求中所引用的文檔不存在。
5XX-服務器錯誤(Server Error)表示服務器不能完成對請求的處理:如 500
響應報頭:跟請求報頭一樣,它指出服務器的功能,標識出響應數據的細節。
空行:也是屬于響應報頭和響應正文之間必須存在的一個空行,表示響應報頭結束,接下來是響應正文
響應正文:也就是服務器返回的網頁內容。
根據上文的描述,再結合工具實際驗證一回,相信應該能對HTTP協議和其通信流程有個大致的了解。
五、擴展知識
高層協議有:文件傳輸協議 FTP 、電子郵件傳輸協議 SMTP 、域名系統服務 DNS 、網絡新聞傳輸協議NNTP 和 HTTP 協議等。
中介由三種:代理 (Proxy) 、網關 (Gateway) 和通道 (Tunnel) ,一個代理根據 URI 的絕對格式來接受請求,重寫全部或部分消息,通過 URI 的標識把已格式化過的請求發送到服務器。網關是一個接收代理,作為一些其它服務器的上層,并且如果必須的話,可以把請求翻譯給下層的服務器協議。一個通道作為不改變消息的兩個連接之間的中繼點 。 當通訊需要通過一個中介 ( 例如 : 防火墻等 ) 或者是中介不能識別消息的內容時,通道經常被使用。
- 代理 (Proxy):一個中間程序 , 它可以充當一個服務器 , 也可以充當一個客戶機 , 為其它客戶機建立請求。請求是通過可能的翻譯在內部或經過傳遞到其它的 服務器中。一個代理在發送請求信息之前,必須解釋并且如果可能重寫它 。 代理經常作為通過防火墻的客戶機端的門戶 , 代理還可以作為一個幫助應用來通過協議處理沒有被用戶代理完成的請求。
- 網關 (Gateway):一個作為其它服務器中間媒介的服務器。與代理不同的是,網關接受請求就好象對被請求的資源來說它就是源服務器;發出請求的客戶機并沒有意識到它在同網關打交道。 網關經常作為通過防火墻的服務器端的門戶 , 網關還可以作為一個協議翻譯器以便存取那些存儲在非HTTP 系統中的資源。
- 通道 (Tunnel):是作為兩個連接中繼的中介程序。一旦激活,通道便被認為不屬于 HTTP 通訊,盡管通道可能是被一 個 HTT P 請求初始化的 。 當被中繼的連接兩端關閉時,通道便消失 。 當一個門戶 (Portal)必須存在或中介 (Intermediary) 不能解釋中繼的通訊時通道被經常使用。
轉載于:https://www.cnblogs.com/hnrainll/archive/2011/09/19/2180961.html
總結
以上是生活随笔為你收集整理的web前端常识之浏览器原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GEE windows 环境配置
- 下一篇: python数组排序(递归实现)