我們?cè)跒g覽器地址欄輸入地址回車以后:
瀏覽器發(fā)送 Http請(qǐng)求 到服務(wù)器.
服務(wù)器上有一個(gè)叫做 Web容器 (提供Http服務(wù))的應(yīng)用程序, 用來(lái)接這個(gè)請(qǐng)求, 這個(gè) Web容器通常是 Nginx (或者Apache IIS).
如果請(qǐng)求的是一個(gè)靜態(tài)的資源(就是服務(wù)器上直接存在的文件), 一般Web容器就可以直接讀取文件內(nèi)容, 然后響應(yīng)給瀏覽器了.
如果請(qǐng)求的數(shù)據(jù)是要?jiǎng)討B(tài)計(jì)算的, 這時(shí)候就需要在服務(wù)器進(jìn)行編程來(lái)實(shí)現(xiàn). 具體如何實(shí)現(xiàn)呢?
我們讓Nginx把請(qǐng)求轉(zhuǎn)發(fā)給用某種語(yǔ)言寫的應(yīng)用程序, 讓這個(gè)程序去做具體業(yè)務(wù)的處理. 這個(gè)程序用的語(yǔ)言就是 PHP (當(dāng)然也可以是JAVA .NET)
PHP接到請(qǐng)求后, 就開始運(yùn)行我們編寫的PHP程序啦. 處理過程中時(shí)候, 可能需要還讀取一些數(shù)據(jù). 這些數(shù)據(jù)存放的地方就是 MySQL (也可以是其他數(shù)據(jù)庫(kù)啦). 存儲(chǔ)方面還有 Redis / MongoDB 等等, 這個(gè)之后用到再說(shuō)吧.
處理完以后, PHP把結(jié)果(可能是某個(gè)動(dòng)態(tài)生成的網(wǎng)頁(yè))給到Nginx, Nginx再響應(yīng)回去, 給到瀏覽器. 這個(gè) Http響應(yīng) 的響應(yīng)體(body)里, 放的就是個(gè) HTML 頁(yè)面. (HTML暫且先理解成一個(gè)記事本寫的內(nèi)容, 不同的是里面支持各種語(yǔ)法, 通過語(yǔ)法顯示出比記事本更豐富的效果)
瀏覽器會(huì)解析這個(gè)HTML做渲染, 解析的同時(shí), 發(fā)現(xiàn) HTML 里可能有含很多的外鏈資源鏈接, 于是他一邊解析一邊發(fā)送對(duì)于這些資源的請(qǐng)求. 這些資源可能是 圖片 / JS (Javascript) / CSS (層疊樣式表) 等.
CSS我們理解他是網(wǎng)頁(yè)的皮膚.
JS是運(yùn)行在瀏覽器里的編程語(yǔ)言, JS一旦被請(qǐng)求回來(lái)了, 瀏覽器就會(huì)執(zhí)行他. 他可以控制網(wǎng)頁(yè)里的各個(gè)元素, 還可以自己去發(fā)Http請(qǐng)求, 讓網(wǎng)頁(yè)具有各種功能.