1. 簡(jiǎn)單描述下web 服務(wù)器、PHP、數(shù)據(jù)庫(kù)、瀏覽器是如何實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)站的?
FF)P2Z3Q7516CJZ@ZHRAKU9.png
- 用戶端訪問(wèn)服務(wù)端的HTML文件
- 用戶本機(jī)中的host文件中查找,若找不到就會(huì)繼續(xù)向上一級(jí)的DNS(域名服務(wù)器)尋找相應(yīng)的DNS服務(wù)器,將網(wǎng)站的主機(jī)域名解析為操作系統(tǒng)中對(duì)應(yīng)的IP地址,如
http://www.baidu.com/
對(duì)應(yīng)的IP地址為14.215.177.37
- 通過(guò)http協(xié)議鏈接到IP地址對(duì)應(yīng)的web服務(wù)器系統(tǒng),通過(guò)默認(rèn)的80端口請(qǐng)求web服務(wù)器上的對(duì)應(yīng)目錄下的html文件,一般80端口為計(jì)算機(jī)默認(rèn)的本地端口,輸入U(xiǎn)RL(資源定位符)不用輸入端口
- web服務(wù)器收到用戶的訪問(wèn)請(qǐng)求后,在它管理的目錄中找到對(duì)應(yīng)的html文件,并將內(nèi)容響應(yīng)給瀏覽器
- 瀏覽器收到web服務(wù)器的響應(yīng)后,接收和下載傳輸過(guò)來(lái)的html代碼,并進(jìn)行解析,生成DOM樹和渲染樹,最終將頁(yè)面呈現(xiàn)出來(lái)
- 用戶端訪問(wèn)服務(wù)器端的php文件
- 該步與上面訪問(wèn)html靜態(tài)網(wǎng)頁(yè)是一樣的,通過(guò)DNS服務(wù)器解析出相應(yīng)的Web服務(wù)器的IP地址。
- 與上面訪問(wèn)html靜態(tài)頁(yè)面相似,不過(guò)最后請(qǐng)求的是web服務(wù)器上相應(yīng)目錄下的php文件,如index.php
- web服務(wù)器自己不能處理php的動(dòng)態(tài)腳本語(yǔ)言,于是尋找相應(yīng)的PHP應(yīng)用服務(wù)器處理,并將請(qǐng)求訪問(wèn)的php文件交給php應(yīng)用服務(wù)器
- PHP應(yīng)用服務(wù)器接收php文件(如index.php),打開并解釋php文件,最終翻譯成html靜態(tài)代碼,再將html靜態(tài)代碼交還給web服務(wù)器,web服務(wù)器將接收到的html靜態(tài)代碼輸出到瀏覽器
- 與上面訪問(wèn)html靜態(tài)頁(yè)面相同,瀏覽器收到Web服務(wù)器的響應(yīng)后,接收并下載服務(wù)器端的html靜態(tài)代碼,然后瀏覽器解讀代碼,最終將網(wǎng)頁(yè)呈現(xiàn)出來(lái)
- 用戶端訪問(wèn)服務(wù)器端的MySQL數(shù)據(jù)庫(kù)
- 該步與上面訪問(wèn)php文件一樣,通過(guò)DNS服務(wù)器解析出相應(yīng)的Web服務(wù)器的IP地址
- 與上面訪問(wèn)php文件一樣,請(qǐng)求訪問(wèn)web服務(wù)器上相應(yīng)目錄下的php文件
- 與上面訪問(wèn)php文件一樣,PHP應(yīng)用服務(wù)器接收Apache服務(wù)器的委托,收到相應(yīng)的php文件
- PHP應(yīng)用服務(wù)器打開php文件,在php文件中通過(guò)對(duì)數(shù)據(jù)庫(kù)連接的代碼來(lái)連接本機(jī)或者網(wǎng)絡(luò)上其他機(jī)器上的MySQL數(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)代碼
- 瀏覽器收到Web服務(wù)器的響應(yīng)后,接收并下載服務(wù)器端的html靜態(tài)代碼,然后瀏覽器解讀代碼,最終將網(wǎng)頁(yè)呈現(xiàn)出來(lái)
- 小結(jié):3種訪問(wèn)方式的區(qū)別,第1種由于它訪問(wèn)的是web服務(wù)器上靜態(tài)的html代碼,所以它沒有必要像第2種php文件需要委托給php應(yīng)用的服務(wù)器進(jìn)行編譯為html代碼再進(jìn)行發(fā)送,而第三種只是在第二種的基礎(chǔ)上訪問(wèn)了
多了一步訪問(wèn)數(shù)據(jù)庫(kù)。
2.常見的 WEB 服務(wù)器有哪些?
- Web服務(wù)器可以解析HTTP協(xié)議。當(dāng)Web服務(wù)器接收到一個(gè)HTTP請(qǐng)求,會(huì)返回一個(gè)HTTP響應(yīng),例如送回一個(gè)HTML頁(yè)面。為了處理一個(gè)請(qǐng)求Web服務(wù)器可以響應(yīng)一個(gè)靜態(tài)頁(yè)面或圖片,進(jìn)行頁(yè)面跳轉(zhuǎn)或者把動(dòng)態(tài)響應(yīng)的產(chǎn)生委托給一些其它的程序例如CGI腳本,JSP腳本,servlets,ASP腳本,服務(wù)器端JavaScript,或者一些其它的服務(wù)器端技術(shù)。無(wú)論腳本的目的如何,這些服務(wù)器端的程序通常產(chǎn)生一個(gè)HTML的響應(yīng)來(lái)讓瀏覽器可以瀏覽
- 在UNIX和Linux平臺(tái)下使用最廣泛的免費(fèi)HTTP服務(wù)器是W3C、NCSA和APACHE服務(wù)器,而Windows平臺(tái)NT/2000/2003使用IIS的WEB服務(wù)器。在選擇使用WEB服務(wù)器應(yīng)考慮的本身特性因素有:性能、安全性、日志和統(tǒng)計(jì)、虛擬主機(jī)、代理服務(wù)器、緩沖服務(wù)和集成應(yīng)用程序等,下面介紹幾種常用的WEB服務(wù)器
- Microsoft的Web服務(wù)器產(chǎn)品為Internet Information Server (IIS), IIS 是允許在公共Intranet或Internet上發(fā)布信息的Web服務(wù)器。IIS是一種Web服務(wù)組件,其中包括Web服務(wù)器、FTP服務(wù)器、NNTP服務(wù)器和SMTP服務(wù)器,分別用于網(wǎng)頁(yè)瀏覽、文件傳輸、新聞服務(wù)和郵件發(fā)送等方面,它使得在網(wǎng)絡(luò)(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作為擴(kuò)展Web服務(wù)器功能的編程接口;同時(shí),它還提供一個(gè)Internet數(shù)據(jù)庫(kù)連接器,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢和更新
- WebSphere Application Server 是 一 種功能完善、開放的Web應(yīng)用程序服務(wù)器,是IBM電子商務(wù)計(jì)劃的核心部分,它是基于 Java 的應(yīng)用環(huán)境,用于建立、部署和管理 Internet 和 Intranet Web 應(yīng)用程序。IBM 將提供 WebSphere 產(chǎn)品系列,通過(guò)提供綜合資源、可重復(fù)使用的組件、功能強(qiáng)大并易于使用的工具、以及支持 HTTP 和 IIOP 通信的可伸縮運(yùn)行時(shí)環(huán)境,來(lái)幫助這些用戶從簡(jiǎn)單的 Web 應(yīng)用程序轉(zhuǎn)移到電子商務(wù)世界。
- BEA WebLogic Server 是一種多功能、基于標(biāo)準(zhǔn)的web應(yīng)用服務(wù)器,為企業(yè)構(gòu)建自己的應(yīng)用提供了堅(jiān)實(shí)的基礎(chǔ)。各種應(yīng)用開發(fā)、部署所有關(guān)鍵性的任務(wù),無(wú)論是集成各種系統(tǒng)和數(shù)據(jù)庫(kù),還是提交服務(wù)、跨 Internet 協(xié)作,起始點(diǎn)都是 BEA WebLogic Server。由于 它具有全面的功能、對(duì)開放標(biāo)準(zhǔn)的遵從性、多層架構(gòu)、支持基于組件的開發(fā),基于 Internet 的企業(yè)都選擇它來(lái)開發(fā)、部署最佳的應(yīng)用。
- apache仍然是世界上用的最多的Web服務(wù)器,市場(chǎng)占有率達(dá)60%左右。它源于NCSAhttpd服務(wù)器,當(dāng)NCSA WWW服務(wù)器項(xiàng)目停止后,那些使用NCSA WWW服務(wù)器的人們開始交換用于此服務(wù)器的補(bǔ)丁,這也是apache名稱的由來(lái)(pache 補(bǔ)丁)。世界上很多著名的網(wǎng)站都是Apache的產(chǎn)物,它的成功之處主要在于它的源代碼開放、有一支開放的開發(fā)隊(duì)伍、支持跨平臺(tái)的應(yīng)用(可以運(yùn)行在幾乎所有的Unix、Windows、Linux系統(tǒng)平臺(tái)上)以及它的可移植性等方面。
- Tomcat是一個(gè)開放源代碼、運(yùn)行servlet和JSP Web應(yīng)用軟件的基于Java的Web應(yīng)用軟件容器。Tomcat Server是根據(jù)servlet和JSP規(guī)范進(jìn)行執(zhí)行的,因此我們就可以說(shuō)Tomcat Server也實(shí)行了Apache-Jakarta規(guī)范且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好。目前,許多大型Web應(yīng)用一般將Apache和Tomcat結(jié)合使用,Apache負(fù)責(zé)接收用戶的HTTP請(qǐng)求,如果請(qǐng)求是Servlet、Jsp,則把請(qǐng)求轉(zhuǎn)發(fā)給Tomcat處理,并將處理結(jié)果封裝響應(yīng)給用戶。
- Zeus:是一個(gè)運(yùn)行于Unix下的非誠(chéng)優(yōu)秀的Web服務(wù)器,據(jù)說(shuō)性能超過(guò)Apache,是效率最高的Web服務(wù)器之一。
- Nginx:不僅是一個(gè)小巧且高效的HTTP服務(wù)器,也可以做一個(gè)高效的負(fù)載均衡反向代理,通過(guò)它接受用戶的請(qǐng)求并分發(fā)到多個(gè)Mongrel進(jìn)程可以極大提高Rails應(yīng)用的并發(fā)能力。
- Lighttpd:它是由得國(guó)人JanKneschke領(lǐng)導(dǎo)開發(fā)的,基于BSD許可的開源WEB服務(wù)器軟件,其根本的目的是提供一個(gè)專門針對(duì)高性能網(wǎng)站,安全、快速、兼容性好并且靈活的webserver環(huán)境。具有非常低的內(nèi)存開銷,CPU占用率低,效能好,以及豐富的模塊等特點(diǎn)。支持FastCGI,CGI,Auth,輸出壓縮(outputcompress),URL重寫,Alias等重要功能。
- Sun的Java系統(tǒng)Web服務(wù)器也就是以前的Sun ONE Web Server。主要出現(xiàn)在那些運(yùn)行Sun的Solaris操作系統(tǒng)的關(guān)鍵任務(wù)級(jí)Web服務(wù)器上。它最新的版本號(hào)是6.1,可以支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至可以支持Windows,但它的大多數(shù)用戶都選擇了SPARC版本的Solaris操作系統(tǒng)。
- GFEGoogle的web服務(wù)器,用戶數(shù)量激增。目前緊逼iis。
- Resin提供了最快的jsp/servlets運(yùn)行平臺(tái)。在java和javascript的支持下,Resin可以為任務(wù)靈活選用合適的開發(fā)語(yǔ)言。Resin的一種先進(jìn)的語(yǔ)言XSL(XML stylesheet language)可以使得形式和內(nèi)容相分離。
- Jetty是一個(gè)開源的servlet容器,它為基于Java的web內(nèi)容,例如JSP和servlet提供運(yùn)行環(huán)境。Jetty是使用Java語(yǔ)言編寫的,它的API以一組JAR包的形式發(fā)布。開發(fā)人員可以將Jetty容器實(shí)例化成一個(gè)對(duì)象,可以迅速為一些獨(dú)立運(yùn)行(stand-alone)的Java應(yīng)用提供網(wǎng)絡(luò)和web連接。
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)
- 瀏覽器查找域名相對(duì)應(yīng)的IP地址,當(dāng)然瀏覽器會(huì)先在自身DNS緩存記錄中查找有無(wú)該地址的映射。如果沒有找到,便會(huì)去系統(tǒng)緩存中尋找有無(wú)這個(gè)記錄,沒有的話,再到路由器中查找,還沒有的話再到ISP服務(wù)商的DNS緩存中查找,最后沒有則將從頂級(jí)域名服務(wù)器的根服務(wù)器開始遞歸查詢,一層一層的查找DNS,知道找到對(duì)應(yīng)的IP。
1.png
-瀏覽器將請(qǐng)求發(fā)給Nginx,Nginx響應(yīng)之后根據(jù)用戶需求,通過(guò)PHP應(yīng)用處理程序進(jìn)行處理,若設(shè)計(jì)到用戶登錄及數(shù)據(jù)的增刪改查,PHP會(huì)與數(shù)據(jù)庫(kù)MySQL進(jìn)行交互,最后服務(wù)器會(huì)返回一個(gè)靜態(tài)的html文檔
2.png
- 服務(wù)器將靜態(tài)的HTML文檔發(fā)送到客戶端(瀏覽器)
- 瀏覽器收到服務(wù)器響應(yīng)后,開始下載HTML代碼,通過(guò)解析和渲染,呈現(xiàn)出網(wǎng)頁(yè)的頁(yè)面
3.png
- 瀏覽器的下載、解析、渲染都是從上到下的
- 解析下載的HTML代碼,生成DOM樹
- 解析html代碼中的CSS文件,結(jié)合dom樹進(jìn)行css渲染
- 解析dom樹的每個(gè)節(jié)點(diǎn)的幾何結(jié)構(gòu),把節(jié)點(diǎn)繪制到屏幕上
4.解析js文件,解析完成后執(zhí)行,一般放在頁(yè)面的最后 - 最后把遇到的關(guān)聯(lián)資源內(nèi)圖片、音頻、視頻進(jìn)行并行下載,一般而言同一域名并行下載的數(shù)量有限,通常把圖片、音頻、視頻等較大的資源放在不同的域名下,但缺陷是用戶體驗(yàn)不好
- 到此一個(gè)頁(yè)面終于出現(xiàn)了
- 但若是登陸修改信息,瀏覽器會(huì)通過(guò)ajax處理頁(yè)面的異步請(qǐng)求
- 最后如果出現(xiàn)一些非常規(guī)的響應(yīng)處理,狀態(tài)碼報(bào)錯(cuò)
- 301 (SC_MOVED_PERMANENTLY)狀態(tài)是指所請(qǐng)求的文檔在別的地方;文檔新的URL會(huì)在定位響應(yīng)頭信息中給出。瀏覽器會(huì)自動(dòng)連接到新的URL。
- 400 (SC_BAD_REQUEST)指出客戶端請(qǐng)求中的語(yǔ)法錯(cuò)誤
- 401 (SC_UNAUTHORIZED)表示客戶端在授權(quán)頭信息中沒有有效的身份信息時(shí)訪問(wèn)受到密碼保護(hù)的頁(yè)面。這個(gè)響應(yīng)必須包含一個(gè)WWW-Authenticate的授權(quán)信息頭,限制訪問(wèn)Web頁(yè)
- 403 (SC_FORBIDDEN)的意思是除非擁有授權(quán)否則服務(wù)器拒絕提供所請(qǐng)求的資源。這個(gè)狀態(tài)經(jīng)常會(huì)由于服務(wù)器上的損壞文件或目錄許可而引起。
- 404 (SC_NOT_FOUND)狀態(tài)每個(gè)網(wǎng)絡(luò)程序員可能都遇到過(guò),他告訴客戶端所給的地址無(wú)法找到任何資源。它是表示“沒有所訪問(wèn)頁(yè)面”的標(biāo)準(zhǔn)方式。這個(gè)狀態(tài)碼是常用的響應(yīng)并且在HttpServletResponse類中有專門的方法實(shí)現(xiàn)它:sendError("message")。相對(duì)于setStatus使用sendError得好處是:服務(wù)器會(huì)自動(dòng)生成一個(gè)錯(cuò)誤頁(yè)來(lái)顯示錯(cuò)誤信息。
- 405 (SC_METHOD_NOT_ALLOWED)指出請(qǐng)求方法(GET, POST, HEAD, PUT, DELETE, 等)對(duì)某些特定的資源不允許使用。
- 406 (SC_NOT_ACCEPTABLE)表示請(qǐng)求資源的MIME類型與客戶端中Accept頭信息中指定的類型不一致。
- 500 (SC_INTERNAL_SERVER_ERROR) 是常用的“服務(wù)器錯(cuò)誤”狀態(tài)。該狀態(tài)經(jīng)常由CGI程序引起也可能(但愿不會(huì)如此!)由無(wú)法正常運(yùn)行的或返回頭信息格式不正確的servlet引起
- 502 (SC_BAD_GATEWAY)被用于充當(dāng)代理或網(wǎng)關(guān)的服務(wù)器;該狀態(tài)指出接收服務(wù)器接收到遠(yuǎn)端服務(wù)器的錯(cuò)誤響應(yīng)
- 狀態(tài)碼503 (SC_SERVICE_UNAVAILABLE)表示服務(wù)器由于在維護(hù)或已經(jīng)超載而無(wú)法響應(yīng)