首先對(duì)上篇blog進(jìn)行一個(gè)補(bǔ)充: 以我做的“基于線(xiàn)程池和數(shù)據(jù)庫(kù)連接池的web服務(wù)器”為例,說(shuō)說(shuō)HTTP通信的流程,大體分為三個(gè)階段: A. 連接 服務(wù)器通過(guò)一個(gè)ServerSocket類(lèi)對(duì)象對(duì)8000端口進(jìn)行監(jiān)聽(tīng),監(jiān)聽(tīng)到之后建立 連接,打開(kāi)一個(gè)socket虛擬文件。 B. 請(qǐng)求 創(chuàng)建與建立socket連接相關(guān)的流對(duì)象后,瀏覽器獲取請(qǐng)求,為GET請(qǐng)求,則 從請(qǐng)求信息中獲取所訪(fǎng)問(wèn)的HTML文件名,向服務(wù)器發(fā)送請(qǐng)求。 C. 應(yīng)答 服務(wù)收到請(qǐng)求后,搜索相關(guān)目錄文件,若不存在,返回錯(cuò)誤信息。若存在, 則想html文件,進(jìn)行加HTTP頭等處理后響應(yīng)給瀏覽器,瀏覽器解析html 文件,若其中還包含圖片,視頻等請(qǐng)求,則瀏覽器再次訪(fǎng)問(wèn)web服務(wù)器,異 常獲取圖片視頻等,并對(duì)其進(jìn)行組裝顯示出來(lái)。
Ok! 言歸正傳! 寫(xiě)上篇blog時(shí),留下了一個(gè)問(wèn)題,就是瀏覽器的工作原理,在我們輸入一個(gè)網(wǎng)址就獲得如此豐富多彩的網(wǎng)絡(luò)世界的背后究竟發(fā)生了什么事請(qǐng),作為一個(gè)軟件工程的學(xué)生很有必要研究一下! 上網(wǎng)查了查,想總結(jié)如下: S1: 瀏覽器根據(jù)你輸入的網(wǎng)址查找IP地址。這里涉及到一個(gè)叫DNS(域名解析系統(tǒng))的東西,專(zhuān)門(mén)用于查找域名對(duì)應(yīng)的IP地址的。當(dāng)然,處于性能的考慮,不是每一次都需要到這個(gè)系統(tǒng)中進(jìn)行查找的,這里邊會(huì)有很多的緩存對(duì)一些對(duì)應(yīng)信息進(jìn)行緩存。會(huì)依次查詢(xún):瀏覽器緩存,系統(tǒng)緩存,路由器緩存,ISP DNS緩存,ISP DNS對(duì)root域名服務(wù)器到自己的域名服務(wù)器進(jìn)行遞歸搜索。
這里產(chǎn)生一個(gè)問(wèn)題:負(fù)載平衡器; S2: 瀏覽器向服務(wù)器發(fā)送請(qǐng)求。(當(dāng)然,有時(shí)候?yàn)g覽器中有緩存另當(dāng)別論)。這里就是上篇blog中提到的過(guò)程了。 當(dāng)然這里可以有一個(gè)小插曲,重定向響應(yīng)。當(dāng)輸入http:///時(shí),當(dāng)服務(wù)器回給瀏覽器響應(yīng)一個(gè)301永久重定向響應(yīng)。 瀏覽器接到重定向后就會(huì)跟蹤重定向,進(jìn)而瀏覽器就會(huì)訪(fǎng)問(wèn)“http://www./” 而非“http:///”。 這里也產(chǎn)生一個(gè)問(wèn)題:cookies
S3: 服務(wù)器處理請(qǐng)求。 服務(wù)器接受請(qǐng)求,并進(jìn)行處理。 這里面還是大有文章可做啊。具體的如何處理的,那又將是一個(gè)美麗的世界: 里面至少包括下列知識(shí): Web服務(wù)器(IIS,阿帕奇等),CGI,servlet,asp,jsp,以及我們現(xiàn)在所學(xué)的web開(kāi)發(fā)(HSS框架,設(shè)計(jì)模式等等)大都是在做這個(gè)事情。
S4: 服務(wù)器發(fā)回一個(gè)HTML響應(yīng) S5: 瀏覽器開(kāi)始顯示html。 S6: 瀏覽器發(fā)送嵌在html中的相關(guān)對(duì)象。如:圖片,CSS,JS等。這些資源同樣需要經(jīng)歷想訪(fǎng)問(wèn)html文件的流程。 這里同樣有很多東西可以研究的啦!像這些靜態(tài)資源如何存放,有個(gè)叫內(nèi)容分發(fā)器的東西(將這些資源分發(fā)到不同的數(shù)據(jù)中心備份),負(fù)責(zé)平衡器等在這里就有用處了。
S7: 補(bǔ)充瀏覽器發(fā)送一個(gè)AJAX請(qǐng)求。 對(duì)這個(gè)還不是太明白,同樣產(chǎn)生一個(gè)問(wèn)題:AjAx。
查資料了解到: fiddler這個(gè)工具能夠讓你看到瀏覽器發(fā)送的異步請(qǐng)求。事實(shí)上,你不僅可以被動(dòng)的做為這些請(qǐng)求的看客,還能主動(dòng)出擊修改和重新發(fā)送它們。AJAX請(qǐng)求這么容易被蒙,可著實(shí)讓那些計(jì)分的在線(xiàn)游戲開(kāi)發(fā)者們郁悶的了。(當(dāng)然,可別那樣騙人家~) Facebook聊天功能提供了關(guān)于AJAX一個(gè)有意思的問(wèn)題案例:把數(shù)據(jù)從服務(wù)器端推送到客戶(hù)端。因?yàn)?/span>HTTP是一個(gè)請(qǐng)求-響應(yīng)協(xié)議,所以聊天服務(wù)器不能把新消息發(fā)給客戶(hù)。取而代之的是客戶(hù)端不得不隔幾秒就輪詢(xún)下服務(wù)器端看自己有沒(méi)有新消息。 這些情況發(fā)生時(shí)長(zhǎng)輪詢(xún)是個(gè)減輕服務(wù)器負(fù)載挺有趣的技術(shù)。如果當(dāng)被輪詢(xún)時(shí)服務(wù)器沒(méi)有新消息,它就不理這個(gè)客戶(hù)端。而當(dāng)尚未超時(shí)的情況下收到了該客戶(hù)的新消息,服務(wù)器就會(huì)找到未完成的請(qǐng)求,把新消息做為響應(yīng)返回給客戶(hù)端。
寫(xiě)本blog遇到的問(wèn)題如下: 1. 負(fù)載平衡器 是以一個(gè)特定IP地址進(jìn)行偵聽(tīng)并將網(wǎng)絡(luò)請(qǐng)求轉(zhuǎn)發(fā)到集群服務(wù)器上的硬件設(shè)備。 一些大型的站點(diǎn)一般都會(huì)使用這種昂貴的高性能負(fù)載平衡器。 ???多次接觸到這個(gè)詞了~~~~ 先放這下次解決! 2. Cookies 3. AJAX |
|