從打開一個(gè)網(wǎng)址說起
當(dāng)在瀏覽器中輸入一個(gè)網(wǎng)址的時(shí)候,瀏覽器會(huì)渲染出對(duì)應(yīng)的網(wǎng)頁的內(nèi)容。作為web開發(fā)人員來說,應(yīng)該知道這個(gè)過程:
當(dāng)輸入的一個(gè)網(wǎng)址為域名的時(shí)候,瀏覽器則根據(jù)本機(jī)的網(wǎng)關(guān)和DNS服務(wù)器來解析出訪問的真正的IP地址。如果是直接訪問IP則直接與服務(wù)器通信,發(fā)送請(qǐng)求。 請(qǐng)求原理簡(jiǎn)單如下:
(此處只是簡(jiǎn)單表示下域名解析原理,解析過程比這個(gè)復(fù)雜的多。)發(fā)送請(qǐng)求的時(shí)候會(huì)經(jīng)歷TCP三次握手過程(http也是基于TCP的協(xié)議),當(dāng)TCP連接建立成功后,瀏覽器會(huì)根據(jù)http協(xié)議,把請(qǐng)求的內(nèi)容封裝成請(qǐng)求報(bào)文,發(fā)送給web服務(wù)器.
服務(wù)器會(huì)根據(jù)請(qǐng)求的報(bào)文的內(nèi)容,執(zhí)行對(duì)應(yīng)的程序和讀取對(duì)應(yīng)的文件,按照http協(xié)議的規(guī)則返回響應(yīng)內(nèi)容(包括header和body)。
服務(wù)器根據(jù)響應(yīng)頭來解析響應(yīng)的內(nèi)容,完成html+css+js的渲染和執(zhí)行。
http協(xié)議
HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
用簡(jiǎn)單的話來說,當(dāng)客戶端與服務(wù)器端通信的時(shí)候,需要傳輸?shù)膬?nèi)容有(HTML 文件,js+css, 圖片,文本, 查詢結(jié)果等),http協(xié)議把內(nèi)容傳輸規(guī)范化??梢噪S便查看下一個(gè)http協(xié)議的內(nèi)容:
(上面的圖是請(qǐng)求jqury的請(qǐng)求和響應(yīng)信息)
請(qǐng)求的頭信息
GET /script/jquery.js HTTP/1.1 Host: common.cnblogs.com Connection: keep-alive Pragma: no-cache Cache-Control: no-cache User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 Accept: */* Referer: http://kb.cnblogs.