當我們上網(wǎng)的時候走哺,會在瀏覽器里輸入一個URL地址蚯嫌,也就是我們俗稱的網(wǎng)址丙躏,比如www.baidu.com。然后敲一下回車晒旅,百度的首頁就展示在瀏覽器上了栅盲,今天我們就來分析一下,從敲擊回車按鈕到百度首頁展示废恋,這中間到底發(fā)生了什么摩瞎。
基本過程
- DNS解析
- TCP鏈接
- 發(fā)出http請求
- 服務器接受http請求并返回處理結果
- 瀏覽器接受服務器的返回結果并解析展示
- 鏈接結束
DNS解析
DNS解析的過程就是將你輸入的網(wǎng)址指向它所對應的計算機的ip地址,當我們輸入www.baidu.com時旗们,DNS會將這個網(wǎng)址解析成它對應的計算機ip地址,例如100.20.201.33构灸,這個ip地址對每臺計算機來說都是唯一的上渴。
TCP鏈接
當瀏覽器的請求到達服務器之后,tcp會在雙方之間建立一個通信通道喜颁,使得雙方可以進行通信,這部分內(nèi)容不是很熟悉半开,所以就不深入去描述了。
發(fā)出http請求
這部分的工作是有客戶端完成的寂拆,也就是瀏覽器,瀏覽器構建http請求報文通過tcp協(xié)議發(fā)送給瀏覽器的過程就是http請求纠永。http請求主要由三部分組成:請求行、請求報頭和請求正文
下面的部分是請求報頭
在這個過程中還會涉及到請求的方法涉波,常用的請求的方式有GET POST DELETE PUT 這些方法之間的區(qū)別在這里就不展開敘述了。這時候啤覆,我們的請求就通過瀏覽器發(fā)送出去了惭聂。
服務器接受請求返回結果
自然而然這部分對應的就是后端工程師眼中的HTTP城侧。后端從在固定的端口接收到TCP報文開始彼妻,它會對TCP連接進行處理,對HTTP協(xié)議進行解析侨歉,并按照報文格式進一步封裝成HTTP Request對象,供上層使用炮温。這一部分工作一般是由Web服務器去進行,比如apache柒啤、nginx、tomcat等担巩。
HTTP響應報文也是由三部分組成:狀態(tài)碼,響應報頭和響應報文。
狀態(tài)碼
狀態(tài)碼是由3位數(shù)組成涛癌,第一個數(shù)字定義了響應的類別,且有五種可能取值:
1xx:指示信息–表示請求已接收拳话,繼續(xù)處理先匪。
2xx:成功–表示請求已被成功接收、理解弃衍、接受呀非。
3xx:重定向–要完成請求必須進行更進一步的操作镜盯。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現(xiàn)。
5xx:服務器端錯誤–服務器未能實現(xiàn)合法的請求哥桥。
平時遇到比較常見的狀態(tài)碼有:200, 403, 404 500
響應報頭
上面的部分就是響應頭
響應報文
服務器返回給瀏覽器的文本信息激涤,通常HTML, CSS, JS, 圖片等文件就放在這一部分判呕。
瀏覽器解析響應報文
瀏覽器會將接受到到html,css侠草,js進行解析,然后將它們展示在頁面上边涕,當然,這部分的過程也有很多可以探究的內(nèi)容功蜓,這里就不詳細的描述了。
鏈接結束
當所有內(nèi)容都返回給客戶端之后童社,客戶端和服務端的鏈接就關閉了著隆,因為http是無狀態(tài)的呀癣,如果再次請求,就需要重新建立鏈接项栏。
在這些流程全部完成后腾节,我們就看到我們想要看到的內(nèi)容了。寫的有點簡單了案腺,也參考了一些優(yōu)秀的博客作者的文章。