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