1.web服務器惊楼、PHP捻艳、數(shù)據(jù)庫、瀏覽器是如何實現(xiàn)動態(tài)網(wǎng)站的?
- 用戶通過瀏覽器輸入要訪問的url
- 瀏覽器查找域名對應的IP地址该溯。(域名解析)
- 瀏覽器查找到對應主機IP地址后岛抄,與對應主機的web服務器建立連接,通過HTTP協(xié)議(超文本傳輸協(xié)議)向web服務器發(fā)送請求狈茉,請求服務器上相應目錄下的文件
- web服務器收到請求后夫椭,在他的管理目錄中找到相應文件。如果用戶請求的是html文件氯庆,則web服務器找到對應html文件后蹭秋,打開html文件,并將html代碼響應給客戶端堤撵。
若用戶請求的是php文件仁讨,則web服務器將找到的php文件交給PHP應用服務器處理(web服務器本身不處理php動態(tài)文件)。 - PHP應用服務器接收并打開文件php文件实昨,在php文件中通過對數(shù)據(jù)庫連接的代碼來連接本機或者網(wǎng)絡上其他機器上的數(shù)據(jù)庫洞豁,并在php程序中通過執(zhí)行標準的SQL查詢語句來獲取數(shù)據(jù)庫中的數(shù)據(jù),再通過PHP應用服務器將數(shù)據(jù)生成html靜態(tài)代碼荒给,并將html靜態(tài)代碼交還給web服務器丈挟,web服務器將接收到的html靜態(tài)代碼輸出到客戶端瀏覽器
- 瀏覽器收到web服務器的響應后,接收并下載服務器端的html靜態(tài)代碼志电,然后瀏覽器解析代碼曙咽,最終將網(wǎng)頁呈現(xiàn)出來。
域名解析過程如下:
- 瀏覽器緩存
瀏覽器會緩存DNS記錄一段時間挑辆。有趣的是例朱,操作系統(tǒng)沒有告訴瀏覽器儲存DNS記錄的時間,這樣不同瀏覽器會儲存?zhèn)€自固定的時間(2分鐘到30分鐘不等)之拨。 - 系統(tǒng)緩存
如果在瀏覽器緩存里沒有找到需要的記錄茉继,瀏覽器會做一個系統(tǒng)調(diào)用。操作系統(tǒng)檢查自己本地的hosts文件是否有這個網(wǎng)址映射關系蚀乔,如果有烁竭,就先調(diào)用這個IP地址映射,完成域名解析吉挣。 - 路由器緩存
如果hosts里沒有這個映射派撕,則將查詢請求發(fā)向路由器,他一般會有自己的DNS緩存睬魂,如果緩存中有這個網(wǎng)址的映射關系终吼,則直接返回,完成域名解析氯哮。 - ISP DNS(本地DNS服務器)將請求發(fā)至根域名服務器际跪,
如果上述緩存都沒有相應的網(wǎng)址映射關系,首先會找TCP/IP參數(shù)中設置的首選DNS服務器(ISP的DNS),在此我們叫它本地DNS服務器姆打,此服務器收到查詢時良姆,如果要查詢的域名包含在本地配置區(qū)域資源中,則返回解析結果幔戏,完成域名解析玛追。
如果要查詢的域名不由本地DNS服務器區(qū)域解析,但該服務器緩存了此網(wǎng)址映射關系闲延,則調(diào)用這個IP地址映射痊剖,完成域名解析。 - 遞歸搜索
如果本地DNS服務器解析失敗垒玲,則將請求發(fā)送至根DNS服務器陆馁,從根DNS服務器開始進行遞歸搜索。根DNS服務器收到請求后會判斷這個域名(.com)是由誰來授權管理侍匙,并會返回一個負責該頂級域名服務器的一個IP氮惯。本地DNS服務器收到IP信息后,將會聯(lián)系負責.com域的這臺服務器想暗,這臺負責.com域的服務器收到請求后,如果自己無法解析帘不,就會找一個管理.com域的下一級DNS服務器地址給本地域名服務器说莫。當本地DNS服務器收到這個地址后,就會通過地址找這個域服務器寞焙,重復上面的動作储狭,進行查詢,直至找到對應主機捣郊,最終將結果返回給本地DNS服務器辽狈,由此DNS服務器再返回給客戶機。
2.常見的web服務器有哪些呛牲?
- IIS
IIS(Internet信息服務)英文Internet Information Server的縮寫刮萌。它是微軟公司主推的服務器。 - Apache
Apache是世界使用排名第一的Web服務器軟件娘扩。它幾乎可以運行在所有的計算機平臺上着茸。由于Apache是開源免費的,因此有很多人參與到新功能的開發(fā)設計琐旁,不斷對其進行完善涮阔。Apache的特點是簡單、速度快灰殴、性能穩(wěn)定敬特,并且可以做代理服務器來使用 - Nginx
Nginx不僅是一個小巧且高效的HTTP服務器,也可以做一個搞笑的負載均衡反向代理,通過它接受用戶的請求并分發(fā)到多個Mongrel進程可以極大提高Rails應用的并發(fā)能力 - Tomcat
Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta項目中的一個核心項目伟阔,有Apache辣之、Sun和其他一些公司及個人共同開發(fā)而成。Tomcat技術先進减俏、性能穩(wěn)定召烂,而且免費,因而深受Java愛好者的喜愛娃承,并得到了部分軟件開發(fā)商的認可奏夫,成為目前比較流行的Web應用服務器 - Lighttpd
Lighttpd是由德國人Jan Kneschke領導開發(fā)的,基于BSD許可的開源Web服務器軟件历筝,其根本目的是提供一個專門針對高性能網(wǎng)站酗昼,安全、快速梳猪、兼容性好并且靈活的web server環(huán)境麻削。具有非常低的內(nèi)存開銷,CPU占用率低春弥,效能好呛哟,以及豐富的模塊等特點。支持FastCGI匿沛、CGI扫责、Auth、輸出壓縮(output compress)逃呼、URL重寫鳖孤、Alias等重要功能 - Zeus
Zeus是一個運行于Unix下的非常優(yōu)秀的Web服務器,據(jù)說性能超過Apache抡笼,是效率最高的Web服務器之一
3.打開瀏覽器苏揣,在地址欄輸入http://jirengu.com 頁面展現(xiàn)了饑人谷官網(wǎng)的信息,整個過程發(fā)生了什么推姻?(饑人谷官網(wǎng)后臺語言php平匈,web服務器nginx,數(shù)據(jù)庫mysql)
- 用戶在瀏覽器中輸入http://jirengu.com
- 瀏覽器通過DNS服務器查找域名對應的IP地址
- 瀏覽器通過TCP/IP協(xié)議與對應IP地址的nginx服務器建立連接拾碌,通過HTTP協(xié)議向nginx服務器請求相應資源
- nginx服務器收到請求后吐葱,在相應目錄下尋找對應php文件,并將對應php文件交由php應用服務器處理
- php應用服務器接收php文件并打開校翔,根據(jù)php文件內(nèi)對數(shù)據(jù)庫連接的代碼來連mysql接數(shù)據(jù)庫弟跑,并根據(jù)php文件中的mysql數(shù)據(jù)庫操作代碼從mysql數(shù)據(jù)庫中獲取數(shù)據(jù),再將數(shù)據(jù)生成html靜態(tài)代碼并交還給nginx服務器
- nginx服務器將接收到的html靜態(tài)代碼響應給客戶端瀏覽器
- 瀏覽器收到nginx服務器的響應后防症,接收并下載服務器端的html靜態(tài)代碼孟辑,然后對html靜態(tài)代碼進行解析哎甲,最后將頁面渲染出來
參考:
動態(tài)網(wǎng)站訪問流程
從 url 輸入到 dns 解析
本文版權屬吳天喬所有,轉(zhuǎn)載務必注明出處饲嗽。