對(duì)于后端初學(xué)者而言,http請(qǐng)求響應(yīng)是每個(gè)初學(xué)者繞不開的知識(shí)點(diǎn)。因?yàn)橹挥辛私饬藶g覽器訪問一個(gè)網(wǎng)站的過程,才能學(xué)會(huì)如何去搭建后端來實(shí)現(xiàn)這個(gè)過程。所以今天小編就著瀏覽器訪問一個(gè)網(wǎng)站的過程,來好好的講講什么是請(qǐng)求,什么是響應(yīng)。
首先,一個(gè)網(wǎng)頁(yè)請(qǐng)求的完整過程包括瀏覽器向服務(wù)器發(fā)送請(qǐng)求和服務(wù)器返回響應(yīng)。具體過程如下圖所示(部分過程不屬于后端必須掌握的知識(shí),小編不做深入):
由上圖可知,一個(gè)完整的請(qǐng)求響應(yīng)過程,由用戶輸入U(xiǎn)RL開始(但這只是最簡(jiǎn)單的情況,還有表單提交,ajax動(dòng)作等等,這些都是請(qǐng)求),然后瀏覽器將用戶的操作轉(zhuǎn)化為請(qǐng)求并格式化成相應(yīng)的請(qǐng)求報(bào)頭通過http協(xié)議(詳見http消息結(jié)構(gòu))發(fā)送給服務(wù)器。然后服務(wù)器將請(qǐng)求進(jìn)行處理后生成一個(gè)響應(yīng)。同樣地,通過http協(xié)議返回給瀏覽器,瀏覽器通過對(duì)響應(yīng)的解析,然后做出相應(yīng)的操作(如果返回了html,就講html渲染后展示在瀏覽器上,如果是ajax通過json收發(fā)數(shù)據(jù),則由ajax負(fù)責(zé)頁(yè)面渲染)。然后用戶就得到了他想要得到的頁(yè)面(不過或許服務(wù)器沒有用戶想要的頁(yè)面,就會(huì)返回404錯(cuò)誤)。講完了一個(gè)完整的請(qǐng)求流程,接下來讓小編詳細(xì)介紹一下什么是請(qǐng)求,什么是響應(yīng)。
什么是請(qǐng)求?
請(qǐng)求中最常見的當(dāng)屬get和post兩種請(qǐng)求,在小編的get和post有什么區(qū)別?——get與post詳解一文中對(duì)這兩種請(qǐng)求有所介紹。通俗的理解,請(qǐng)求就像一封信,所有的請(qǐng)求信息都寫在信封上。而get方法與post方法的最主要區(qū)別是,get方法只有信封,需要什么東西只能寫在信封上;而post則是完整的信件,它可以將數(shù)據(jù)放在信封里面的信件。瀏覽器和網(wǎng)絡(luò)(路由器,上圖未標(biāo)出,不是必須掌握的知識(shí)點(diǎn))則扮演著郵遞員的職責(zé)——通過對(duì)請(qǐng)求頭的解析,將請(qǐng)求準(zhǔn)確的送到對(duì)應(yīng)的服務(wù)器上的應(yīng)用。
什么是響應(yīng)?
服務(wù)器接收到瀏覽器發(fā)送來的請(qǐng)求后得到了瀏覽器的請(qǐng)求數(shù)據(jù),并做出了數(shù)據(jù)處理然后生成對(duì)應(yīng)的響應(yīng)(可以理解為回信,關(guān)于接受請(qǐng)求并生成回應(yīng)這個(gè)過程,就是后端開發(fā)者的工作了)。與請(qǐng)求一樣,響應(yīng)也有一個(gè)響應(yīng)頭,但響應(yīng)頭的內(nèi)容與請(qǐng)求頭大不相同。
此外,響應(yīng)還會(huì)附帶響應(yīng)內(nèi)容(通常是HTML文件),如下圖所示:
看到這一串的HTML代碼看官大大們是不是明白了什么?沒錯(cuò),我們收到了服務(wù)器給我們返回的響應(yīng),接下來只需要瀏覽器將HTML文件進(jìn)行解析渲染,我們就能看到我們想要看到的頁(yè)面了。
小結(jié)
以上就是瀏覽器訪問一個(gè)網(wǎng)站的全部過程了。其實(shí)中間的網(wǎng)絡(luò)傳輸小編還省略了DNS解析等內(nèi)容,不過這些并不是后端開發(fā)初學(xué)者必須要掌握的。另外,請(qǐng)求與響應(yīng)雖然是屬于計(jì)算機(jī)通信協(xié)議的內(nèi)容,但是不管是前端還是后端都應(yīng)該掌握,甚至爬蟲工程師也要對(duì)此深入研究,所以這個(gè)知識(shí)點(diǎn)是相當(dāng)重要的,希望各位讀者能夠掌握該知識(shí)點(diǎn)。
從前端到后端再到數(shù)據(jù)庫(kù),全棧工程師必備技能,在W3C編程課上都能學(xué)啦,快來和小編一起學(xué)習(xí)編程吧!