天天看點

前背景的網絡資料傳輸

主要是圍繞浏覽器的工作展開,包括浏覽器處理使用者的互動、發送網絡請求、收到網絡響應之後的處理與渲染等等

浏覽器本身與使用者的互動基本不涉及網絡知識,但web前端ui的設計與實作是一個前端研發攻城獅必須掌握的(主要是js相關)

最普通的就是“從位址欄輸入url開始……”,主要涉及使用者端浏覽器、作業系統的網絡子產品的相關處理。浏覽器會對url進行檢查、分析,涉及url合法性、url對應的協定(最常見的時http協定,也是部分浏覽器的預設網絡協定);如果url合法,接下來會檢查url中host是一個域名(domain)還是一個ip位址;如果是ip位址,會直接發送請求,否則會檢視系統本地的hosts檔案有沒有相應的配置,沒有的話會啟用dns(域名系統)協定查詢域名對應的ip位址;發送出請求,浏覽器的工作暫時結束,網絡請求交由作業系統處理,值得注意的是,如果是新入網機器或者區域網路剛從網絡故障中恢複,作業系統還可能動用arp協定(位址解析協定)擷取到出口路由的mac位址,以便把資料包交給路由器,并有路由器轉發到外網;作業系統協定棧對網絡請求資料包的解析與處理是另一方面内容(主要涉及不同網絡層次的不同網絡協定)

這是傳統前端工程師必須掌握的知識,資源型的網絡響應(比如doc文檔、zip壓縮封包檔)浏覽器會智能地處理下載下傳事宜;如果相應内容是可渲染的純文字,就交由前端程式以合理的布局“鋪”到頁面中;而頁面代碼(html/css)的解析與現實則由浏覽器的渲染引擎實作,不同浏覽器渲染引擎的政策可能不同,會有一些需要注意的地方,前端工程師也會掌握這部分知識。

主要涉及web伺服器(不是大刀片那種的“硬體伺服器”)對網絡請求的處理。可以直覺認為web伺服器就是接受并處理浏覽器發送的某些協定的網絡請求、并把對應處理結果傳回給使用者端浏覽器的網絡應用程式。主流web伺服器有apache/iis/nginx/tomcat(不同的web伺服器程式與不同的背景腳本程式語言或者技術配套處理網絡請求,比如tomcat主要與jsp語言配套,微軟的iis主要與asp/aspx技術配套結合);web伺服器通常可以接受靜态請求并直接傳回靜态内容,但遇到動态内容的請求(目前web應用大多數動态的),web伺服器就要把請求委托給各種語言和技術開發的“web背景程式”,由背景程式處理動态請求,再把處理後的結果(響應内容)交給web伺服器,最後web伺服器會把響應通過網際網路傳回給使用者端浏覽器。這方面再細節的話主要就是背景程式的架構、開發、優化技術了

網際網路層次體系的劃分(如理想的osi的七層模型和實用的tcp/ip四層網絡模型),每個層次裡包含的主要的網絡協定,路由原理等等

網際網路按各種标準的劃分,比如按照網絡規模和地域關系劃分為區域網路、城域網、廣域網;按照網絡拓撲結構分為總線型、樹狀網絡、網狀、分布式等等,更細節的會有各種被劃分的子類中一些技術,比如私有位址與公網位址轉換的nat(network address translation,網絡位址轉換)技術

網際網路不同層次裡的不同協定的各種細節(資料包結構、運作政策比如tcp協定的三次握手和擁塞避免、滑動視窗、ip位址劃分、dns查詢原理)甚至包括常見的協定安全類知識

這部分内容相當繁瑣複雜,但裡面的各種基礎知識是從事網絡應用開發、網絡運維、網絡安全領域人員的必備知識

下面來說一說http請求的基本過程

首先http是一個應用層的協定,在這個層的協定,隻是一種通訊規範,也就是因為雙方要進行通訊,大家要事先約定一個規範

當我們輸入這樣一個請求時,首先要建立一個socket連接配接,因為socket是通過ip和端口建立的,是以之前還有一個dns解析過程,把域名變成ip,如果url裡不包含端口号,則會使用該協定的預設端口号

我們本地的機器上在配置網絡時都會填寫dns,這樣本機就會把這個url發給這個配置的dns伺服器,如果能夠找到相應的url則傳回其ip,否則該dns将繼續将該解析請求發送給上級dns,整個dns可以看做是一個樹狀結構,該請求将一直發送到根直到得到結果。現在已經擁有了目标ip和端口号,這樣我們就可以打開socket連接配接了

連接配接成功建立後,開始向web伺服器發送請求,這個請求一般是get或post指令(post用于form參數的傳遞)。get指令的格式為:get 路徑/檔案名 http/1.0

檔案名指出所通路的檔案

http/1.0指出web浏覽器使用的http版本

現在可以發送get指令:get /mydir/index.html http/1.0

web伺服器收到這個請求,進行處理。從它的文檔空間中搜尋子目錄mydir的檔案index.html。如果找到該檔案,web伺服器把該檔案内容傳送給相應的web浏覽器

為了告知浏覽器,web伺服器首先傳送一些http頭資訊,然後傳送具體内容(即http體資訊),http頭資訊和http體資訊之間用一個空行分開

常用的http頭資訊有:

http 1.0 200 ok  這是web伺服器應答的第一行,列出伺服器正在運作的http版本号和應答代碼。代碼"200 ok"表示請求完成

mime_version:1.0 它訓示mime類型的版本

content_type:類型 這個頭資訊非常重要,它訓示http體資訊的mime類型。如:content_type:text/html訓示傳送的資料是html文檔

content_length:長度值 它訓示http體資訊的長度(位元組)

當應答結束後,web浏覽器與web伺服器必須斷開,以保證其它web浏覽器能夠與web伺服器建立連接配接