版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、隨著 Web2.0 時(shí)代的到來,互聯(lián)網(wǎng)的網(wǎng)絡(luò)架構(gòu)已經(jīng)從傳統(tǒng)的 C/S 架構(gòu)轉(zhuǎn)變到更加方便快捷的 B/S 架/S 架構(gòu)大大簡(jiǎn)化了用戶使用網(wǎng)絡(luò) 應(yīng)用上的難度,這種人人都能上網(wǎng),人人都能使用網(wǎng)絡(luò)上提供的服務(wù)的方法也進(jìn)一步推動(dòng)了互聯(lián)網(wǎng)的繁榮。B/S 的架構(gòu)從兩方面帶來了好處:1.客戶端使用的的瀏覽器(Browse)。由于瀏覽器具有性,它不需要特殊的 配置和網(wǎng)絡(luò)連接,有效的了不同服務(wù)提供商提供給用戶使用服務(wù)的差異性。另外最重要的一點(diǎn)是基于瀏覽器的交互特性使用的用戶使用非常簡(jiǎn)化和用戶行為的可 繼承行非常強(qiáng),也就是用戶只要第一次學(xué)會(huì)了上網(wǎng),不管使用的是哪個(gè)應(yīng)用,一旦學(xué)會(huì)了, 再使用其他互聯(lián)網(wǎng)服務(wù)時(shí)同樣積累了
2、使用經(jīng)驗(yàn),因?yàn)樗鼈兌际腔谕瑯拥臑g覽器操作界面。2.服務(wù)端(Server)基于的 HTTP 協(xié)議。和傳統(tǒng)的 C/S 架構(gòu)使用自定義的應(yīng) 用層協(xié)議不同,B/S 架構(gòu)使用的都是的 HTTP 協(xié)議。使用的HTTP 協(xié)議也會(huì)給服務(wù)提供商簡(jiǎn)化了開發(fā)模式,使得服務(wù)器開發(fā)者可以采用相對(duì)規(guī)范的開 發(fā)模式,這樣可以開發(fā)成本,如使用的的HTTP 協(xié)議,所以基于 HTTP 協(xié)議的 服務(wù)器就有很多如:Apache、IIS、Nginx、Tomcat、Js 等,這些服務(wù)器可以直接拿來使用,不需要服務(wù)開發(fā)者單獨(dú)來開發(fā),不僅如 此,連開發(fā)服務(wù)的通用框架都不需要單獨(dú)開發(fā),服務(wù)開發(fā)者只需要關(guān)注提供服務(wù)的應(yīng)用邏輯,其他一切和框架都
3、可以直接拿來使用,所以 B/S 這種架構(gòu)同樣使 得服務(wù)器提供者簡(jiǎn)化了開發(fā),使得越來越多的互聯(lián)網(wǎng)服務(wù)出現(xiàn)。B/S 網(wǎng)絡(luò)架構(gòu)不管對(duì)普通用戶的使用還是對(duì)服務(wù)的開發(fā)都帶來了好處,作為互聯(lián)網(wǎng)主要參與者中的兩個(gè)人群:服務(wù)使用者和服務(wù)開發(fā)者都降低了學(xué)習(xí)成本。 但是作為互聯(lián)網(wǎng)應(yīng)用的開發(fā)者還是要清楚當(dāng)用戶從瀏覽器里點(diǎn)擊某個(gè)開始到的服務(wù)返回結(jié)果到瀏覽器這個(gè)過程到底發(fā)生什么,這其中還需要哪些技術(shù) 來配合等,這些底層還需要進(jìn)一步掌握。所以本章將為你描述這一過程的工作原理,他將涉及到瀏覽器的基本行為和HTTP 協(xié)議的過程、DNS 如何到對(duì)應(yīng)的 IP 地址、CDN 又是如何工作和設(shè)計(jì)的一級(jí)瀏覽器如何渲染出返回的結(jié)果等。B
4、/S 網(wǎng)絡(luò)架構(gòu)概述B/S 的網(wǎng)絡(luò)架構(gòu)從前端到后端都得到了簡(jiǎn)化,都是基于的應(yīng)用層協(xié)議 HTTP來交互數(shù)據(jù),與大多數(shù)傳統(tǒng) C/S 互聯(lián)網(wǎng)應(yīng)用程序采用的長(zhǎng)連接的交互模 式不同, HTTP 協(xié)議采用無狀態(tài)的短連接的通信方式,通常情況下,一次請(qǐng)求就完成了一次數(shù)據(jù)交互,通常也是對(duì)應(yīng)一個(gè)業(yè)務(wù)邏輯,然后這次通信連接就斷開了。 采用這種方式是為了能夠同時(shí)服務(wù)的用戶,因?yàn)楫?dāng)前互聯(lián)網(wǎng)應(yīng)用每天都會(huì)出來上億級(jí)別的用戶請(qǐng)求,不可能每個(gè)用戶一次后就一直保持住這個(gè)連接。關(guān)于HTTP 的詳細(xì)細(xì)節(jié)在后面 HTTP 協(xié)議一節(jié)再詳細(xì)介紹?;?HTTP 協(xié)議這種協(xié)議的本身的特點(diǎn),目前的 B/S 的網(wǎng)絡(luò)架構(gòu)大多采用類似于下圖所示的架構(gòu)
5、設(shè)計(jì),既要滿足海量用戶請(qǐng)求,又要保持用戶請(qǐng)求的快速響應(yīng),所以使得現(xiàn)在的網(wǎng)絡(luò)架構(gòu)也越來越復(fù)雜。當(dāng)一個(gè)用戶在瀏覽器里輸入首先他會(huì)要請(qǐng)求 DNS 把這個(gè)這個(gè) URL 時(shí),將會(huì)發(fā)生很多操作,成對(duì)應(yīng)的 IP 地址,然后根據(jù)這個(gè) IP 地址在互聯(lián)網(wǎng)上找到這個(gè) IP 地址對(duì)應(yīng)的服務(wù)器, 向這個(gè)服務(wù)器發(fā)起一個(gè) get 請(qǐng)求,由這個(gè)服務(wù)器決定返回默認(rèn)的數(shù)據(jù)資源給的用戶,在服務(wù)器端實(shí)際上還有很復(fù)雜的業(yè)務(wù)邏輯:服務(wù)器可能有很多臺(tái),到底指 定那臺(tái)服務(wù)器來處理請(qǐng)求,所以需要一個(gè)負(fù)載均衡設(shè)備來平均分配所有用戶的請(qǐng)求;還有要請(qǐng)求的數(shù)據(jù)是存在分布式緩存里還是一個(gè)靜態(tài)文件,還是在數(shù)據(jù)庫里;當(dāng) 數(shù)據(jù)返回到瀏覽器里時(shí),瀏覽器數(shù)據(jù)發(fā)
6、現(xiàn)還有一些靜態(tài)資源如 css、js 或者時(shí)又會(huì)發(fā)起另外的HTTP 請(qǐng)求,而這些請(qǐng)求很可能會(huì)在 CDN 上,那么 CDN 服務(wù)器又會(huì)處理這個(gè)用戶的請(qǐng)求,大體上一個(gè)用戶請(qǐng)求會(huì)涉及到這么多的操作。每一個(gè)細(xì)節(jié)都會(huì)影響到這個(gè)請(qǐng)求最終是否會(huì)成功。不絡(luò)架構(gòu)如何變化,但是始終有一些固定不變的原則需要遵守:互聯(lián)網(wǎng)上所有資源都要用一個(gè) URL 來表示。URL 就將資源定位符,顧名思義。如果你要發(fā)布一個(gè)服務(wù)或者一個(gè)資源到互聯(lián)網(wǎng)上,讓別人能夠到,那么你首先必須要有一個(gè)世界上獨(dú)一無二的 URL。不要小看這個(gè) URL,他包含了幾乎整個(gè)互聯(lián)網(wǎng)的架構(gòu)精髓。必須基于 HTTP 協(xié)議與服務(wù)端交互。不管你要的是國(guó)內(nèi)的還是國(guó)外的、是
7、文本數(shù)據(jù)還是流,都必須按照套路出牌,也就是都采用打招呼的方式,這樣人家才會(huì)明白你要的是什么。數(shù)據(jù)展示必須在瀏覽器里。當(dāng)你獲取到數(shù)據(jù)資源,要能正確展示必須在瀏覽器上才能恢復(fù)他的容貌,你用其他工具只能占有的,不能獲取他的。只要滿足上面的幾點(diǎn)基本上一個(gè)互聯(lián)網(wǎng)應(yīng)用就能正確的運(yùn)轉(zhuǎn)起來了,當(dāng)然這里面還有好多細(xì)節(jié),這些細(xì)節(jié)將分別在后面的小節(jié)里詳細(xì)講解。如何發(fā)起一個(gè)請(qǐng)求如何發(fā)起一個(gè) HTTP 請(qǐng)求?這個(gè)問題似乎既簡(jiǎn)單又復(fù)雜,簡(jiǎn)單是當(dāng)在瀏覽器里輸入一個(gè) URL 時(shí),敲下回車后這個(gè) HTTP 請(qǐng)求就發(fā)起了,很快你就會(huì) 看到這個(gè)請(qǐng)求的返回結(jié)果。復(fù)雜的是能不能不借助瀏覽器也能發(fā)起請(qǐng)求,這里的不借助有兩層含義,一是我能
8、不能自己組裝一個(gè)符合 HTTP 協(xié)議的數(shù)據(jù)包,二 是處理瀏覽器還能有哪些方式也能簡(jiǎn)單的發(fā)起一個(gè) HTTP 請(qǐng)求。下面就按照這兩層含義來解釋如何發(fā)起一個(gè) HTTP 請(qǐng)求。如何發(fā)起一個(gè) HTTP 請(qǐng)求和如何建立一個(gè) socket 連接區(qū)別不大,只不過outputStream.write 寫的二進(jìn)制字節(jié)數(shù)據(jù)格式要符合 HTTP 協(xié)議。瀏覽器在建立socket 連接之前,必須根據(jù)地址欄里輸入的URL 中的DNS出 IP 地址,再根據(jù)這個(gè) IP 地址和默認(rèn) 80 端口和服務(wù)器建立 socket 連接,然后瀏覽器根據(jù)這個(gè) URL 組裝成一個(gè) get 類型的 HTTP 請(qǐng)求頭,通過 outputStream
9、.write發(fā)送到目標(biāo)服務(wù) 器,服務(wù)器等待 inputStream.read 返回?cái)?shù)據(jù),最后斷開這個(gè)連接。當(dāng)然了不同瀏覽器在如何使用這個(gè)已經(jīng)建立好的連接,是根據(jù)什么規(guī)則來管理連接,有各種不同實(shí)現(xiàn)方法。一句話總結(jié),發(fā)起一個(gè) HTTP 請(qǐng)求的過程就是建立一個(gè) socket 通信的過程。既然發(fā)起一個(gè) HTTP 連接本質(zhì)上就是建立一個(gè)socket 連接,那么完全可以模擬瀏覽器來發(fā)起 HTTP 請(qǐng)求,這很好實(shí)現(xiàn),也有很多方法現(xiàn)實(shí),如 HttpCnt就是一個(gè)開源的通過程序?qū)崿F(xiàn)的處理 HTTP 請(qǐng)求的工具包。,當(dāng)然如果你對(duì) HTTP協(xié)議的數(shù)據(jù)結(jié)構(gòu)非常熟悉的話,你完全可以自己再實(shí)現(xiàn) 另外一個(gè) HttpC甚至可
10、以自己寫個(gè)簡(jiǎn)單的瀏覽器。nt,如下是一個(gè)基本的 HttpCnt 的調(diào)用示例:HttpCnt httpCnt = createHttpCnt();處理 Java 中使用非常普遍的 HttpCnt,還有很多類似的工具,如 Linux 中的CURL 命令,通過 curl + URL 就可以簡(jiǎn)單的發(fā)起一個(gè) HTTP 請(qǐng)求,非常方便。如 curl “http的 html 數(shù)據(jù),如下:/item.htm?id=1264 可以返回這個(gè)頁面也可以查看這次的 HTTP 情況頭的信息,加上-I 選項(xiàng),如下:tMethodtMethod;StringName = Switcher.;tMethod = newtMe
11、thod(Name);tMethod.addRequestHeader(“Content-Type”, “application/x-www-form-urlencoded; charset=GBK”);for (FilterData filterData : filterDatas) tMethod.addParameter(“ip”, filterData.ip);tMethod.addParameter(“count”, String.valueOf(filterDount);try httpCnt.executeMethod(tMethod);tMethod.getResponseBo
12、dyAsString(); catch (Exception e) logger.error(e);還可以在方法這個(gè) URL 時(shí)增加 HTTP 頭,通過-H選項(xiàng)實(shí)現(xiàn),如下圖所示:缺少下所示:信息,返回 302 狀態(tài)碼,必須增加才能正確方式該,如Http 協(xié)議B/S 網(wǎng)絡(luò)架構(gòu)的是 HTTP 協(xié)議,掌握 HTTP 協(xié)議對(duì)一個(gè)從事互聯(lián)網(wǎng)工作的程序員來說非常重要,也許你已經(jīng)非常熟悉 HTTP 協(xié)議,這里除了再簡(jiǎn)單介紹 HTTP協(xié)議的基本知識(shí)外,還將側(cè)重介紹一下目前在實(shí)際使用中的一些心得,后面將以實(shí)際使用的場(chǎng)景為例介紹。要理解 HTTP 協(xié)議,最重要的就是要熟悉 HTTP 協(xié)議中的 HTTP Heade
13、r,是 HTTP Header 控制著互聯(lián)網(wǎng)上成千上萬的用戶的數(shù)據(jù)的傳輸。最關(guān)鍵的是它控制著用戶瀏覽器的渲染行為和服務(wù)器的執(zhí)行邏輯,例如:當(dāng)服務(wù)器沒有用戶請(qǐng)求的數(shù)據(jù)-H “a=sd0/BjeZulwCAfIdAHkzZZqC; _t_track=42.1320938379988839;”HTTP/1.1 200 OKDate: Sat, 25 Feb 2012 08:41:20 GMTServer: ApacheLast-Modified: Thu, 01 Jan 1970 00:00:00 GMTVary: Accept-EncodingContent-Type: text/html;cha
14、rset=GBK HYPERLINK mailto:junshanv101055.sqa.cm4 junshanv101055.sqa.cm4 admin$ curl -I “http:/:9999/reitory.htm”就會(huì)返回一個(gè) 404 的狀態(tài)碼,告訴瀏覽器沒有要請(qǐng)求的數(shù)據(jù),通常瀏覽器就會(huì)展示一個(gè)非常不愿意看到的該頁面不存在的錯(cuò)誤信息。常見的 HTTP 請(qǐng)求頭常見的 HTTP 響應(yīng)頭要看一個(gè) HTTP 請(qǐng)求的請(qǐng)求頭和響應(yīng)頭,可以通過很多瀏覽器插件來看,在FireFox 有、Chrome、IE 等。HTTP 狀態(tài)碼查看 HTTP 信息的工具狀態(tài)碼說明200客戶端請(qǐng)求成功302臨時(shí)跳轉(zhuǎn),跳
15、轉(zhuǎn)的地址通過Location 指定400403服務(wù)器收到請(qǐng)求,但是提供服務(wù)404請(qǐng)求的資源不存在500服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤/客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器識(shí)別響應(yīng)頭說明Server使用的服務(wù)器名稱Server: Apache/1 3 6 (Unix)Content-Type用來指明發(fā)送給接收者的實(shí)體正文的類型,如 Content-Type:text/html;charset=GBKContent-Encoding請(qǐng)求報(bào)頭Accept-Encoding 對(duì)應(yīng),告訴瀏覽器服務(wù)端采用的是什么壓縮編碼Content-Language描述了資源所用的自然語言,與Accept-Language 對(duì)
16、應(yīng)Content-Length指明實(shí)體正文的長(zhǎng)度,以字節(jié)方式的十進(jìn)制數(shù)字來表示Keep-Alive保持連接的時(shí)間Keep-Alive: timeout=5, max=120請(qǐng)求頭說明Accept-Charset請(qǐng)求報(bào)頭域用于指定客戶端接受的字符集Accept-Encoding是用于指定可接受的內(nèi)容編碼,如Accept-Encoding:gzip deflateAccept-Language用于指定一種自然語言,如AcceHost用于指定被請(qǐng)求資源的 ernet 主機(jī)和端,如 Host:User-Agent客戶端將它的操作系統(tǒng)、瀏覽器和其它屬性告訴服務(wù)器Connection當(dāng)前連接是否保持,如C
17、onnection: Keep-Alive有時(shí)候需要知道一個(gè) HTTP 請(qǐng)求到底返回什么數(shù)據(jù),或者沒有返回?cái)?shù)據(jù)想知道什么原因,這時(shí)候就需要借助一些工具來查詢這次請(qǐng)求的詳細(xì)信息,到底HTTP 請(qǐng)求頭有些什么,響應(yīng)頭又。在 Windows 下現(xiàn)在主流的瀏覽器都有很多工具來查看當(dāng)前的請(qǐng)求的詳細(xì) HTTP 協(xié)議的信息,如下 Firefox 瀏覽器下,使用最多的是 Firebug,如下所示:還有一個(gè) HttpFox 工具提供信息更全,如下圖所示:所有 HTTP 相關(guān)信息都可以一目了然。Chrome 瀏覽器下也有一些類似的工具,自帶的調(diào)試工具如下:同樣可以查看到這次請(qǐng)求的相關(guān)信息。Chrome 下也有類似
18、的 Firebug 工具,但是還不夠完善。IE 從 7 開始也提供了類似的 HTTP 調(diào)試工具,如自帶的開發(fā)命令打開,HttpFox 插件也有 IE 版本,可以安裝一下。工具可以通過 F12瀏覽器緩存機(jī)制瀏覽器緩存是一個(gè)比較復(fù)雜但是又比較重要的一個(gè)機(jī)制通常在瀏覽一個(gè)頁面時(shí)發(fā)現(xiàn)有異常情況下,通??紤]的就是是不是瀏覽器做了緩存,所以的做法就是 Ctrl+F5 重新請(qǐng)求一次這個(gè)頁面,重新請(qǐng)求的頁面肯定是 般 的頁面。為什么 Ctrl+F5 就一定能夠請(qǐng)求到?jīng)]有緩存的頁面呢?首先是在瀏 覽器端,如果是 Ctrl+F5 刷新頁面,那么瀏覽器會(huì)直接向目標(biāo) URL 發(fā)送請(qǐng)求,而不會(huì)使用瀏覽器緩存的數(shù)據(jù),其次
19、即使請(qǐng)求發(fā)送到服務(wù)端,那么也有可能到的是緩存的數(shù)據(jù),比如在的應(yīng)用服務(wù)器的前端部署一個(gè)緩存服務(wù)器,如 Varnish,的那么 Varnish 也可能直接去的是緩存數(shù)據(jù)。所以為了保 證用戶能夠看到數(shù)據(jù),必須通過 HTTP 協(xié)議來控制。如下圖所示,當(dāng)Ctrl+F5 刷新一個(gè)頁面時(shí),在 HTTP 的請(qǐng)求頭中會(huì)增加一些請(qǐng)求頭告訴服務(wù)端,我要獲取的數(shù)據(jù)而不是緩存。這次請(qǐng)求時(shí)沒有發(fā)送到服務(wù)端,使用的是瀏覽器緩存數(shù)據(jù),如果 Ctrl+F5 后,如下圖:這次請(qǐng)求時(shí)從服務(wù)端返回的數(shù)據(jù),最重要的是在請(qǐng)求頭中增加了兩個(gè)請(qǐng)求項(xiàng)Pragma:no-cache 和 Cache-Control:no-cache。為什么增加了
20、這個(gè)兩個(gè)配置項(xiàng),它們HTTP 頭。作用,后文將詳細(xì)解釋與緩存相關(guān)的1. Cache-Control/Pragma這個(gè)HTTP Head 字段用于指定所有緩存機(jī)制在整個(gè)請(qǐng)求/響應(yīng)鏈中必須 服從的指令,如果知道該頁面是否緩存,不僅可以控制瀏覽器還可以控制和HTTP 協(xié)議相關(guān)的緩存或服務(wù)器。HTTP Head 字段有一些控制值,這些值有如下含義:Cache-Control 這個(gè)請(qǐng)求字段被各個(gè)瀏覽器支持較好,而且他的優(yōu)先級(jí)也比較高,如果他和其他一些請(qǐng)求字段(如 Expires )同時(shí)出現(xiàn)時(shí),Cache-Control會(huì)覆蓋其他的字段。Pragma 這個(gè)字段的作用和 Cache-Control 有點(diǎn)類似
21、,它也是在 HTTP 頭中包含一個(gè)特殊的指令,使得相關(guān)的服務(wù)器來遵守,最常用的就是Pragma:no-cache,它和 Cache-Control:no-cache 作用是一樣的。可選值說明public所有內(nèi)容都將被緩存,在響應(yīng)頭中設(shè)置private內(nèi)容只緩存到私有緩存中,在響應(yīng)頭中設(shè)置no-cache所有內(nèi)容都不會(huì)被緩存,在請(qǐng)求頭和響應(yīng)頭中設(shè)置no-store所有內(nèi)容都不會(huì)被緩存到緩存或ernet 臨時(shí)文件中,在響應(yīng)頭中設(shè)置must-revalidation/proxy-revalidation如果緩存的內(nèi)容失效,請(qǐng)求必須發(fā)送到服務(wù)器/以進(jìn)行重新驗(yàn)證,在請(qǐng)求頭中設(shè)置max-age=緩存的內(nèi)容
22、將在秒后失效, 這個(gè)選項(xiàng)只在 HTTP 1 1 可用, 并如果和 Last-Modified 一起使用時(shí), 優(yōu)先級(jí)較高,在響應(yīng)頭中設(shè)置Expires 1.Expires 通常使用的格式是:Expires:Sat, 25 Feb 2012 12:22:17 GMT,后面跟著一個(gè)日期時(shí)間,如果頁服務(wù)器發(fā)起請(qǐng)求。2.Last-Modified/Etag一般是服務(wù)端在響應(yīng)頭中返回一個(gè) Last-Modified 字段,告訴瀏覽器這個(gè) 頁面的最后修改時(shí)間 Last-Modified:Sat, 25 Feb 2012 12:55:04 GMT,瀏覽器再次請(qǐng)求時(shí)在請(qǐng)求頭中增加一 個(gè) If-Modified-
23、Since:Sat, 25 Feb 2012 12:55:04 GMT 字段,詢問當(dāng)前緩存的頁面是否,如果是的就返回 304 狀態(tài)碼,告訴瀏覽器是的,服務(wù)器也不會(huì)傳輸新的數(shù)據(jù)。DNS知道互聯(lián)網(wǎng)都是通過 URL 來發(fā)布和請(qǐng)求資源的,而 URL 中的需要成IP 地址才能與的工作范疇。主機(jī)建立連接,如何將成 IP 地址就是屬于 DNS可以毫不夸張的說,雖然平時(shí)上網(wǎng)感覺不到 DNS的存在,但是一旦 DNS出錯(cuò),可能會(huì)導(dǎo)致非常嚴(yán)重的互聯(lián)網(wǎng)。目前世界上整個(gè)互聯(lián)網(wǎng)有幾個(gè)都會(huì)非常嚴(yán)重。DNS 根服務(wù)器,任何一臺(tái)根服務(wù)器宕掉DNS過程與這個(gè)Last-Modified 字段有類似的功能的還有一個(gè) Etag 字段,
24、這個(gè)字段的作用是服務(wù)端給每個(gè)頁面分配一個(gè)唯一的,然后通過這個(gè)來區(qū)分當(dāng)前的這個(gè)頁面是否是的。這種方式比 Last-Modified 更加靈活,但是在后端的 Web 服務(wù)器有多臺(tái)時(shí)比較難處理,因?yàn)槊總€(gè) Web 服務(wù)器都要記住的所有資源,否則瀏覽器反射這個(gè)就沒有意義了。Last-Modified 這個(gè)字段一般用于表示一個(gè)服務(wù)器上的資源,靜態(tài)(靜態(tài)內(nèi)容自動(dòng)加上 Last-Modified 字段)或者動(dòng)態(tài)的內(nèi)容(如 Servlet 提供了一個(gè) getLastModified 方法用于檢查某個(gè)動(dòng)態(tài)內(nèi)容是否已經(jīng)更新)的最后修改時(shí)間,通過這個(gè)最后修改時(shí)間來判斷當(dāng)前請(qǐng)求的資源是否是 的。面在超過這個(gè)時(shí)間值后,緩
25、存的內(nèi)容將失效,也就是瀏覽器在發(fā)出請(qǐng)求之前檢查這個(gè)頁面的這個(gè)字段,看該頁面是否已經(jīng)過期了,過期了就重新向下面是 DNS的主要請(qǐng)求過程實(shí)例圖:DNS如上圖所示,當(dāng)一個(gè)用戶在瀏覽器輸入 時(shí),DNS個(gè)步驟。這個(gè)過程大體描述如下:將會(huì)有將近 10當(dāng)用戶在瀏覽器中輸入并敲下回車后,第一步,瀏覽器會(huì)檢查瀏覽器緩存中有沒有這個(gè)對(duì)應(yīng)的過的 IP 地址,如果緩存命中的話,這個(gè)過程 就將結(jié)束。瀏覽器緩存也是有限制的,不僅瀏覽器緩存大小有限制,而且緩存的時(shí)間也是有限制的,通常情況下有幾分鐘到幾小時(shí)不等,被緩存的時(shí)間限制 可以通過 TTL 屬性來設(shè)置,這個(gè)緩存時(shí)間太長(zhǎng)和太短都不好,如果緩存太長(zhǎng)的話,一旦被到的 IP
26、有變化,會(huì)導(dǎo)致被客戶端緩存的無法到變化后 的 IP 地址,會(huì)導(dǎo)致該不能正常的,這段時(shí)間內(nèi)有可能會(huì)有一部分用戶無法你的一次。如果時(shí)間設(shè)置太短的話,會(huì)導(dǎo)致用戶每次你的都要 重新,從前面的圖中可以看出還是一個(gè)很復(fù)雜的過程。如果用戶的瀏覽器緩存中沒有命中,瀏覽器會(huì)查找操作系統(tǒng)緩存中是否有這個(gè)域名對(duì)應(yīng)的 DNS結(jié)果。其作系統(tǒng)也會(huì)有一個(gè)的過程,在 windows中可以通過 C:WindowsSystem32driversetchosts 文件來設(shè)置,你可以將任何到任何能夠的 IP 地址,如果你在這里指定了一個(gè)對(duì)應(yīng)的IP 地址,那么瀏覽器會(huì)首先使用這個(gè) IP,如在測(cè)試時(shí)可以將一個(gè)到一臺(tái)測(cè)試服務(wù)器上,這樣就不
27、 用修改任何代碼就能測(cè)試到單獨(dú)服務(wù)器上的代碼業(yè)務(wù)邏輯是否正確。正是這種本地 DNS的規(guī)程,就有通過修改你會(huì)被劫持。的把特定的到他指 定的 IP 地址,導(dǎo)致這些這種情況再早期的 window 版本中出現(xiàn)過很嚴(yán)重,而且對(duì)一般不太會(huì)有電腦知識(shí)的用戶來說,出現(xiàn)問題后很難發(fā)現(xiàn),即使發(fā)現(xiàn)也很難自己解決,所以在windows7 中將 hosts 文件設(shè)置成了只讀,防止這個(gè)文件被輕易修改。在 linux 中這個(gè)配置文件是/etc/named.conf,修改這個(gè)文件可以達(dá)到同樣的目的,當(dāng)?shù)竭@個(gè)配置文件中的某個(gè),操作系統(tǒng)會(huì)在緩存中緩存這個(gè)結(jié)果,緩存的時(shí)間同樣是受這個(gè)的失效時(shí)間和這個(gè)緩存的空間大小控制。前面這兩個(gè)步
28、驟都是在本機(jī)完成的,所以在上圖中沒有標(biāo)識(shí)出來。到這里還沒有涉及到真正的會(huì)真正請(qǐng)求服務(wù)器,如果在本機(jī)中仍然無法完成的的話,就服務(wù)器來這個(gè)了。第 3 步,如何、怎么知道服務(wù)器呢?在的網(wǎng)絡(luò)配置中都會(huì)有一項(xiàng) DNS服務(wù)器地址,這個(gè)地址就是設(shè)置如果前面所說的兩個(gè)過程的無法時(shí)要怎么辦,操作系統(tǒng)就會(huì)把這個(gè)發(fā)送給這里設(shè)置的 LDNS,也就是本地區(qū)的服務(wù)器。這個(gè) DNS 通常都是提供給你本地互聯(lián)網(wǎng)接入的一個(gè) DNS服務(wù),如你 是在學(xué)校接入上網(wǎng)的話,那么你的 DNS 服務(wù)器肯定在你學(xué)校,如果你是在一個(gè)小區(qū)接入互聯(lián)網(wǎng)的話,那個(gè)這 DNS 就是提供給你接入互聯(lián)網(wǎng)的應(yīng)用提供商,是電信 或者提供商也就是通常所說的 SPA
29、。那么這個(gè) DNS 通常也會(huì)在你所在城市的某個(gè)角落,通常離也不是很遠(yuǎn)。要查詢這個(gè)地址在 Windows 中可以通過查詢,如下圖:ipconfigWindows 查詢 DNS ServerLinux 下可以通過如下方式查詢配置的 DNS Server,如下圖所示:Linux 下查詢DNS Server這個(gè)專門的服務(wù)器,性能都會(huì)很好,他們一般都會(huì)緩存結(jié)果,失效當(dāng)然緩存時(shí)間是受這個(gè)的主要。大約 80%的的失效時(shí)間控制的,一般緩存空間不是影響都在這里就已經(jīng)完成了。所以 LDNS 主要承擔(dān)了的工作。第 4 步,如果 LDNS 仍然沒有命中的話,就直接到 Root Server。服務(wù)器請(qǐng)求第 5 步,根服
30、務(wù)器返回給本地服務(wù)器一個(gè)所查詢域的主服務(wù)器等全球(gTLD Server) 地址。gTLD 是國(guó)際頂級(jí)只有 13 臺(tái)左右。服務(wù)器如:、第 6 步,本地發(fā)送請(qǐng)求。服務(wù)器 (Local DNS Server) 再向上一步返回的 gTLD 服務(wù)器第 7 步,接受請(qǐng)求的 gTLD 服務(wù)器查找并返回此對(duì)應(yīng)的 Name Server服務(wù)器,如你在某個(gè)服務(wù)器的地址,這個(gè) Name Server 通常就是你的服務(wù)提供商申請(qǐng)的,那么這個(gè)任務(wù)就是由這個(gè)提供商的服務(wù)器來。第 8 步,Name Server服務(wù)器會(huì)查詢的和 ip 的關(guān)系表,正常情況下都根據(jù)服務(wù)器 。得到目標(biāo) ip,連同一個(gè) TTL 值,返回給 DNS
31、 Server第 9 步,返回該對(duì)應(yīng)的ip 和 TTL 值,Local DNS Server 會(huì)緩存這個(gè)和ip 的對(duì)應(yīng)關(guān)系,緩存的時(shí)間由 TTL 值控制。第 10 步,把緩存中,的結(jié)果返回給用戶機(jī)器,用戶機(jī)器也根據(jù) TTL 值緩存在本地 os過程結(jié)束。在實(shí)際的 DNS過程中,可能還不止這個(gè) 10 個(gè)步驟,如 Name Server 也可能有多級(jí),或者有一個(gè) GTM 來負(fù)載均衡控制,這都有可能會(huì)影響的過程。過程Linux 和 Windows 下都可以用 nslookup 命令來查詢的示:結(jié)果,如下圖所Nslookup 查詢結(jié)果Linux 系統(tǒng)中還可以使用 dig 命名來查詢 DNS 的過程,如下
32、所示: HYPERLINK mailto:junshanv101055.sqa.cm4 junshanv101055.sqa.cm4 admin$ dig; DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 ; global options: prcmd; Got answer:; -HEADERHEADER- opcode: QUERY, sus: NX, id: 58602; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0; QUESTION SECTION:;prcmd. IN A;
33、AUTHORITY SECTION:. 10800 IN SOA . nstl. 2012021200 1800 900 604800 86400; Query time: 208 msec; SERVER: 54#53(54); WHEN: Sun Feb 12 19:20:59 2012; MSG SIZE rcvd: 101; Query time: 5 msec; SERVER: 54#53(54); WHEN: Sun Feb 12 19:19:05 2012; MSG SIZE rcvd: 201QUESTION SECTION:部分表示當(dāng)前查詢的是一個(gè)A,ANSWER SECTI
34、ON:部分返回了這個(gè)有 CNAME 到 ,給返回了這個(gè)的 ip 地址。對(duì)應(yīng)還可通過增加+trace 參數(shù)可以這個(gè)的等級(jí)機(jī)構(gòu),如下所示: HYPERLINK mailto:junshanv101055.sqa.cm4 junshanv101055.sqa.cm4 admin$ dig+trace; DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 +trace; global options: prcmd. 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN
35、NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS .; Received 272 bytes from 54#53(54) in 0 mscom. 172800 IN NS .com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.17280
36、0INNS.com.172800INNS.com.172800INNS.com.172800INNS.; Received492 bytes from 29#53() in 607 ms.172800 IN NS.172800 IN NS.172800 IN NS.; Received134 bytes from 0#53() in 250 ms1800 IN CNAME. 86400 IN NS. 86400 IN NS. 86400 IN NS.; Received169 bytes from 9#53() in 0 ms上面清楚顯示了整個(gè)是如何發(fā)起和的過程。從根(.)到 gTLDServ
37、er(.com.)再到 Name Server(.)的整個(gè)過程顯示出來了。從上面還可以看出 DNS 的服務(wù)器有多個(gè)備份,可以從任何一臺(tái)查詢到結(jié)果。如何失效緩存的知道 DNS后會(huì)緩存結(jié)果,其中主要在兩個(gè)地方緩存結(jié)果,一個(gè)是 Local DNS Server,另外一個(gè)用戶的本地機(jī)器。這兩個(gè)緩存都是 TTL 值和本機(jī)緩存大小控制,但是最大緩存時(shí)間是 TTL 值,基本上 Local DNS Server 的緩存時(shí)間就是 TTL 控制,很難有人工介入,但是緩存掉。的本機(jī)緩存可以通過如下方式Windows 下可以通過在命令行模式下執(zhí)行 ipconfig /flushdns 來刷新緩存,如下圖所示:Wind
38、ows 清除 DNS 緩存Linux 下可以通過/etc/init.d/nscd restart 來清除緩存,如下圖所示:Linux 清除 DNS 緩存重啟依然是解決很多問題的第一選擇。在 Java 應(yīng)用中 JVM 也會(huì)緩存 DNS 的結(jié)果,這個(gè)緩存是在 InetAddress 類中完成的,而這個(gè)緩存時(shí)間還比較特殊,他有兩種緩存策略: 一種是正確結(jié)果緩存;一種失敗的結(jié)果緩存。這兩個(gè)緩存時(shí)間有兩個(gè)配置項(xiàng)控制,配置項(xiàng)是在%JAVA_HOME%libsecurity java.security 文件中配置的。分別是networkaddress.cache.ttl 和 networkaddress.c
39、ache.negative.ttl,他們的默認(rèn)值分別是-1(永不失效)和 10(緩存 10 秒)。要修改這兩個(gè)值同樣有幾種方式:分別是直接修改 java.securit 文件中默認(rèn)值;或者在 Java 的啟動(dòng)參數(shù)中增加-D.inetaddr.ttl=態(tài) InetAddress 類動(dòng)態(tài)修改。來修改默認(rèn)值;動(dòng)在這里還要特別強(qiáng)調(diào)一下,如果需要用的 InetAddress 類時(shí),一定要是有單例模式,不然會(huì)有嚴(yán)重的性能問題,如果每次創(chuàng)建 InetAddress 實(shí)例的話,都要進(jìn)行一次完成的,非常耗性能,這點(diǎn)特別要注意。幾種方式主要分為A、MX、CNAME、NS和 TXT。A,A 代表的是 Address
40、,就是用來指定對(duì)應(yīng)的 IP 地址,如將指定到 41 上,將指定到 41 地址上。A可以將多個(gè)到一個(gè) IP 地 址上,但是不能將一個(gè)到多個(gè) IP 地址上。,表示的是 Exchange,就是可以將某個(gè)下的郵件服務(wù)器指向到自己的 Server 上,如MX的AIP 地址是 45,如果 MX設(shè)置為 46,那么如果是的郵件路由的話,DNS將會(huì)將郵件發(fā)送到 46 所在的服務(wù)器,而正常通過 Web 請(qǐng)求的話仍然到 A的 IP 地址。CNAME,是 Canonical Name,也就是別名,可以為一個(gè)到另一個(gè),可以為一個(gè)指定多個(gè)別名。如將到;將也到xulingbo。如前面的小節(jié)中. 1542IN CNAME就是
41、 CNAME。NS,是為某個(gè)指定 DNS服務(wù)器,也就是這個(gè)有指定的 IP 地址的 DNS 服務(wù)器去,面的小節(jié)中. 86400 IN NS.就是 NS。TXT,為某個(gè)主機(jī)名或設(shè)置說明,如可以為 設(shè)置 TXT為”君山的博客|”這樣的說明。CDN 工作機(jī)制CDN 也就是內(nèi)容分布網(wǎng)絡(luò)(Content Distribution Network),它是構(gòu)筑在現(xiàn)有ernet 上的一種先進(jìn)的流量分配網(wǎng)絡(luò)。其目的是通過在現(xiàn)有的ernet 中增加一層新的網(wǎng)絡(luò)架構(gòu),將的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)”邊緣”,使用戶可以就近取得所需的內(nèi)容,提高用戶的響應(yīng)速度。有別于鏡像,它比鏡 像更智能,可以做這樣一個(gè)比喻:CDN =
42、鏡像(Mirror) + 緩存(Cache) + 整體負(fù)載均衡(GSLB)。因而,CDN 可以明顯提高ernet 網(wǎng)絡(luò)中信息的效率。目前 CDN 都是以緩存中的靜態(tài)數(shù)據(jù)為主,如 css、js、和靜態(tài)頁面等這這些靜態(tài)數(shù)些數(shù)據(jù)。使用用戶在從主站服務(wù)器請(qǐng)求到動(dòng)態(tài)內(nèi)容后再從 CDN 上據(jù),從而加速網(wǎng)頁數(shù)據(jù)內(nèi)容的提供的。速度,如淘寶有 90%以上的數(shù)據(jù)都是由 CDN 來通常來說 CDN 要達(dá)到以下這幾個(gè)目標(biāo):Scalability。性能可擴(kuò)展性:應(yīng)對(duì)新增的大量數(shù)據(jù)、用戶和事務(wù)的擴(kuò)展能力;成本可擴(kuò)展性:用低廉的運(yùn)營(yíng)成本提供動(dòng)態(tài)的服務(wù)能力和高質(zhì)量的內(nèi)容分發(fā)Security 。強(qiáng)調(diào)提供物理設(shè)備、網(wǎng)絡(luò)、數(shù)據(jù)和服務(wù)過程的安全性的保障 ,(趨勢(shì))減少因?yàn)?DDoS或者
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 獸醫(yī)專家2025年度顧問咨詢與技術(shù)支持合同2篇
- 2025版金融理財(cái)產(chǎn)品銷售合同履約保證書4篇
- 2025年度出租車租賃與品牌推廣合作合同3篇
- 2024禮品購銷合同模板購銷合同范本
- 2024版濟(jì)寧房屋租賃合同范本
- 二零二四年專業(yè)相機(jī)租賃服務(wù)合同附帶攝影師派遣及培訓(xùn)3篇
- 二零二五版茶葉種植基地土地流轉(zhuǎn)租賃合同3篇
- 2025年養(yǎng)老護(hù)理機(jī)構(gòu)PPP項(xiàng)目特許經(jīng)營(yíng)合同3篇
- 2025年度城市基礎(chǔ)設(shè)施建設(shè)不定期借款合同3篇
- 二零二四年度2024綿陽租賃保證金合同模板3篇
- 2024年湖北省武漢市中考英語真題(含解析)
- 徐州醫(yī)科大學(xué)附屬醫(yī)院
- DLT 261《火力發(fā)電廠熱工自動(dòng)化系統(tǒng)可靠性評(píng)估技術(shù)導(dǎo)則》題庫
- 自動(dòng)化立體庫貨架驗(yàn)收?qǐng)?bào)告
- 消防系統(tǒng)工程質(zhì)量控制資料檢查記錄
- 中藥封包療法操作規(guī)范
- TPO27聽力題目及答案
- 新浪網(wǎng)刪貼申請(qǐng)文檔 (個(gè)人)
- 低溫乙烯罐內(nèi)罐預(yù)冷過程溫度急降原因探討
- 世界各國(guó)電壓頻率一覽表(精編版)
- (完整版)裝飾裝修工程監(jiān)理細(xì)則(詳解)最新(精華版)
評(píng)論
0/150
提交評(píng)論