為什么要寫一個(gè)專欄來(lái)總結(jié)《從一個(gè)瀏覽器的請(qǐng)求到響應(yīng)的過(guò)程,來(lái)總結(jié)這一二年我遇到的“鬼”知識(shí)點(diǎn)》這么龐大的知識(shí)點(diǎn)呢?
寫這些東西絕不是為了吹噓自己懂了什么或者是自己發(fā)現(xiàn)了什么,這,只是一個(gè)記錄,比如后面RESTful介紹,我就可以直接引用阮一峰大佬總結(jié)好的最佳實(shí)踐,別人的輪子已經(jīng)造的挺好了,我為什么還要重復(fù)
起因還是因?yàn)槟炒蚊嬖嚨臅r(shí)候,面試官讓我盡可能詳細(xì)地描述一下“一個(gè)請(qǐng)求到結(jié)束的全過(guò)程”,當(dāng)時(shí)掌握的知識(shí)點(diǎn)水平有限,我就簡(jiǎn)短地回答了一下面試官,但是今天又想起這道面試題,才忽然發(fā)現(xiàn)自己的回答太過(guò)于籠統(tǒng),可能當(dāng)時(shí)面試官想針對(duì)每個(gè)知識(shí)點(diǎn)考察一下,所以才有這個(gè)系列的由來(lái),日后會(huì)慢慢補(bǔ)充,希望各位都能有所收獲
一下是我當(dāng)年的回答,現(xiàn)在看看還真是避重就輕23333:

1、用戶從客戶端發(fā)起請(qǐng)求(流程1),客戶端首先判斷本地緩存(流程2),如果命中緩存則直接響應(yīng)給用戶(流程3),請(qǐng)求結(jié)束

2、未命中緩存,通過(guò)http訪問(wèn)服務(wù)器(流程4),一般都會(huì)做負(fù)載均衡輪訓(xùn)到某一臺(tái)業(yè)務(wù)服務(wù)器(流程5)
3、nginx會(huì)判斷該請(qǐng)求是否緩存,如果命中緩存,或者前端請(qǐng)求的靜態(tài)資源圖片/css/js等文件, 則返回客戶端(流程7)

4、動(dòng)態(tài)資源nginx通過(guò)fastcgi發(fā)送給php-fpm進(jìn)行解析(流程8、9)
5、根據(jù)不同的業(yè)務(wù)需求,php直接或通過(guò)redis/memcached獲取數(shù)據(jù)進(jìn)行業(yè)務(wù)處理(流程10-15),然后返回給nginx(流程16)組裝響應(yīng)報(bào)文,發(fā)送給客戶端
現(xiàn)在回想起來(lái),這個(gè)回答真的只能0分滾粗,很明顯的入門級(jí)水準(zhǔn),我想當(dāng)年考官也不是想聽(tīng)這些,正因?yàn)槿绱?,我才想填補(bǔ)一下以前的遺憾,把這套知識(shí)體系慢慢補(bǔ)全
按照我現(xiàn)在的理解,當(dāng)年的面試官有可能想從這一個(gè)問(wèn)題中獲取如下的知識(shí)點(diǎn):
(流程4)http協(xié)議的三次握手與四次揮手,tcp/ip模型是什么,RESTful編程風(fēng)格
(流程5)select、poll和epoll的實(shí)現(xiàn)機(jī)制與區(qū)別
(流程8)fastcgi接口是什么
(流程10)緩存設(shè)計(jì)方案相關(guān):緩存穿透、緩存雪崩、緩存重建等
(流程12-15)mysql設(shè)計(jì)、索引等
以我現(xiàn)在的水平我就只能暫時(shí)理解成想考我這些知識(shí)點(diǎn)嘍,其他的日后再繼續(xù)補(bǔ)充
那么我之后的文章將從三部分開(kāi)始寫起
1、客戶端處理
2、網(wǎng)絡(luò)傳輸
3、服務(wù)端處理