1.web服務(wù)器、PHP、數(shù)據(jù)庫(kù)、瀏覽器是如何實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)站的?
- 用戶通過(guò)瀏覽器輸入要訪問(wèn)的url
- 瀏覽器查找域名對(duì)應(yīng)的IP地址。(域名解析)
- 瀏覽器查找到對(duì)應(yīng)主機(jī)IP地址后,與對(duì)應(yīng)主機(jī)的web服務(wù)器建立連接,通過(guò)HTTP協(xié)議(超文本傳輸協(xié)議)向web服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求服務(wù)器上相應(yīng)目錄下的文件
- web服務(wù)器收到請(qǐng)求后,在他的管理目錄中找到相應(yīng)文件。如果用戶請(qǐng)求的是html文件,則web服務(wù)器找到對(duì)應(yīng)html文件后,打開html文件,并將html代碼響應(yīng)給客戶端。
若用戶請(qǐng)求的是php文件,則web服務(wù)器將找到的php文件交給PHP應(yīng)用服務(wù)器處理(web服務(wù)器本身不處理php動(dòng)態(tài)文件)。 - PHP應(yīng)用服務(wù)器接收并打開文件php文件,在php文件中通過(guò)對(duì)數(shù)據(jù)庫(kù)連接的代碼來(lái)連接本機(jī)或者網(wǎng)絡(luò)上其他機(jī)器上的數(shù)據(jù)庫(kù),并在php程序中通過(guò)執(zhí)行標(biāo)準(zhǔn)的SQL查詢語(yǔ)句來(lái)獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù),再通過(guò)PHP應(yīng)用服務(wù)器將數(shù)據(jù)生成html靜態(tài)代碼,并將html靜態(tài)代碼交還給web服務(wù)器,web服務(wù)器將接收到的html靜態(tài)代碼輸出到客戶端瀏覽器
- 瀏覽器收到web服務(wù)器的響應(yīng)后,接收并下載服務(wù)器端的html靜態(tài)代碼,然后瀏覽器解析代碼,最終將網(wǎng)頁(yè)呈現(xiàn)出來(lái)。
域名解析過(guò)程如下:
- 瀏覽器緩存
瀏覽器會(huì)緩存DNS記錄一段時(shí)間。有趣的是,操作系統(tǒng)沒(méi)有告訴瀏覽器儲(chǔ)存DNS記錄的時(shí)間,這樣不同瀏覽器會(huì)儲(chǔ)存?zhèn)€自固定的時(shí)間(2分鐘到30分鐘不等)。 - 系統(tǒng)緩存
如果在瀏覽器緩存里沒(méi)有找到需要的記錄,瀏覽器會(huì)做一個(gè)系統(tǒng)調(diào)用。操作系統(tǒng)檢查自己本地的hosts文件是否有這個(gè)網(wǎng)址映射關(guān)系,如果有,就先調(diào)用這個(gè)IP地址映射,完成域名解析。 - 路由器緩存
如果hosts里沒(méi)有這個(gè)映射,則將查詢請(qǐng)求發(fā)向路由器,他一般會(huì)有自己的DNS緩存,如果緩存中有這個(gè)網(wǎng)址的映射關(guān)系,則直接返回,完成域名解析。 - ISP DNS(本地DNS服務(wù)器)將請(qǐng)求發(fā)至根域名服務(wù)器,
如果上述緩存都沒(méi)有相應(yīng)的網(wǎng)址映射關(guān)系,首先會(huì)找TCP/IP參數(shù)中設(shè)置的首選DNS服務(wù)器(ISP的DNS),在此我們叫它本地DNS服務(wù)器,此服務(wù)器收到查詢時(shí),如果要查詢的域名包含在本地配置區(qū)域資源中,則返回解析結(jié)果,完成域名解析。
如果要查詢的域名不由本地DNS服務(wù)器區(qū)域解析,但該服務(wù)器緩存了此網(wǎng)址映射關(guān)系,則調(diào)用這個(gè)IP地址映射,完成域名解析。 - 遞歸搜索
如果本地DNS服務(wù)器解析失敗,則將請(qǐng)求發(fā)送至根DNS服務(wù)器,從根DNS服務(wù)器開始進(jìn)行遞歸搜索。根DNS服務(wù)器收到請(qǐng)求后會(huì)判斷這個(gè)域名(.com)是由誰(shuí)來(lái)授權(quán)管理,并會(huì)返回一個(gè)負(fù)責(zé)該頂級(jí)域名服務(wù)器的一個(gè)IP。本地DNS服務(wù)器收到IP信息后,將會(huì)聯(lián)系負(fù)責(zé).com域的這臺(tái)服務(wù)器,這臺(tái)負(fù)責(zé).com域的服務(wù)器收到請(qǐng)求后,如果自己無(wú)法解析,就會(huì)找一個(gè)管理.com域的下一級(jí)DNS服務(wù)器地址給本地域名服務(wù)器。當(dāng)本地DNS服務(wù)器收到這個(gè)地址后,就會(huì)通過(guò)地址找這個(gè)域服務(wù)器,重復(fù)上面的動(dòng)作,進(jìn)行查詢,直至找到對(duì)應(yīng)主機(jī),最終將結(jié)果返回給本地DNS服務(wù)器,由此DNS服務(wù)器再返回給客戶機(jī)。
2.常見的web服務(wù)器有哪些?
- IIS
IIS(Internet信息服務(wù))英文Internet Information Server的縮寫。它是微軟公司主推的服務(wù)器。 - Apache
Apache是世界使用排名第一的Web服務(wù)器軟件。它幾乎可以運(yùn)行在所有的計(jì)算機(jī)平臺(tái)上。由于Apache是開源免費(fèi)的,因此有很多人參與到新功能的開發(fā)設(shè)計(jì),不斷對(duì)其進(jìn)行完善。Apache的特點(diǎn)是簡(jiǎn)單、速度快、性能穩(wěn)定,并且可以做代理服務(wù)器來(lái)使用 - Nginx
Nginx不僅是一個(gè)小巧且高效的HTTP服務(wù)器,也可以做一個(gè)搞笑的負(fù)載均衡反向代理,通過(guò)它接受用戶的請(qǐng)求并分發(fā)到多個(gè)Mongrel進(jìn)程可以極大提高Rails應(yīng)用的并發(fā)能力 - Tomcat
Tomcat是Apache軟件基金會(huì)(Apache Software Foundation)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目,有Apache、Sun和其他一些公司及個(gè)人共同開發(fā)而成。Tomcat技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java愛(ài)好者的喜愛(ài),并得到了部分軟件開發(fā)商的認(rèn)可,成為目前比較流行的Web應(yīng)用服務(wù)器 - Lighttpd
Lighttpd是由德國(guó)人Jan Kneschke領(lǐng)導(dǎo)開發(fā)的,基于BSD許可的開源Web服務(wù)器軟件,其根本目的是提供一個(gè)專門針對(duì)高性能網(wǎng)站,安全、快速、兼容性好并且靈活的web server環(huán)境。具有非常低的內(nèi)存開銷,CPU占用率低,效能好,以及豐富的模塊等特點(diǎn)。支持FastCGI、CGI、Auth、輸出壓縮(output compress)、URL重寫、Alias等重要功能 - Zeus
Zeus是一個(gè)運(yùn)行于Unix下的非常優(yōu)秀的Web服務(wù)器,據(jù)說(shuō)性能超過(guò)Apache,是效率最高的Web服務(wù)器之一
3.打開瀏覽器,在地址欄輸入http://jirengu.com 頁(yè)面展現(xiàn)了饑人谷官網(wǎng)的信息,整個(gè)過(guò)程發(fā)生了什么?(饑人谷官網(wǎng)后臺(tái)語(yǔ)言php,web服務(wù)器nginx,數(shù)據(jù)庫(kù)mysql)
- 用戶在瀏覽器中輸入http://jirengu.com
- 瀏覽器通過(guò)DNS服務(wù)器查找域名對(duì)應(yīng)的IP地址
- 瀏覽器通過(guò)TCP/IP協(xié)議與對(duì)應(yīng)IP地址的nginx服務(wù)器建立連接,通過(guò)HTTP協(xié)議向nginx服務(wù)器請(qǐng)求相應(yīng)資源
- nginx服務(wù)器收到請(qǐng)求后,在相應(yīng)目錄下尋找對(duì)應(yīng)php文件,并將對(duì)應(yīng)php文件交由php應(yīng)用服務(wù)器處理
- php應(yīng)用服務(wù)器接收php文件并打開,根據(jù)php文件內(nèi)對(duì)數(shù)據(jù)庫(kù)連接的代碼來(lái)連mysql接數(shù)據(jù)庫(kù),并根據(jù)php文件中的mysql數(shù)據(jù)庫(kù)操作代碼從mysql數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),再將數(shù)據(jù)生成html靜態(tài)代碼并交還給nginx服務(wù)器
- nginx服務(wù)器將接收到的html靜態(tài)代碼響應(yīng)給客戶端瀏覽器
- 瀏覽器收到nginx服務(wù)器的響應(yīng)后,接收并下載服務(wù)器端的html靜態(tài)代碼,然后對(duì)html靜態(tài)代碼進(jìn)行解析,最后將頁(yè)面渲染出來(lái)
參考:
動(dòng)態(tài)網(wǎng)站訪問(wèn)流程
從 url 輸入到 dns 解析
本文版權(quán)屬吳天喬所有,轉(zhuǎn)載務(wù)必注明出處。
