陰差陽(yáng)錯(cuò),我成為了一名go開(kāi)發(fā)工程師。雖說(shuō)放棄之前的JAVA積累稍顯可惜,不過(guò)轉(zhuǎn)念一想,反正我JAVA也那么菜,倒不如換個(gè)賽道重新起跑哈哈哈。那么今后go語(yǔ)言就將成為我主修的語(yǔ)言了,不能再像大學(xué)期間那樣得過(guò)且過(guò),必須認(rèn)真鉆研
今天的我們,已經(jīng)習(xí)慣了在一個(gè)又一個(gè)紛繁復(fù)雜的網(wǎng)頁(yè)之間快速點(diǎn)擊,從中獲取自己想要的信息。但這背后的邏輯到底是怎樣的呢?那些文字、圖片、視頻是怎樣傳輸?shù)轿覀兊碾娔X屏幕前的呢?想知道這些,就有必要了解一下構(gòu)建出整個(gè)網(wǎng)頁(yè)系統(tǒng)的web的工作方式了。
平時(shí)瀏覽網(wǎng)頁(yè)的時(shí)候,我們會(huì)網(wǎng)頁(yè)上方的輸入框輸入一個(gè)網(wǎng)址,比如:www.baidu.com,網(wǎng)址輸入完成后,一個(gè)回車(chē),網(wǎng)頁(yè)就跳轉(zhuǎn)到了百度的首頁(yè)。在黑盒視角的用戶看來(lái),這是再簡(jiǎn)單不過(guò)的操作,但以一個(gè)web開(kāi)發(fā)者看來(lái),這么一個(gè)步驟實(shí)際上經(jīng)過(guò)了諸多過(guò)程:
- DNS服務(wù)器將域名(便于記憶)轉(zhuǎn)換成服務(wù)器所在的ip地址
- 瀏覽器與服務(wù)器之間建立TCP連接
- 瀏覽器向服務(wù)器發(fā)送HTTP Request
- 服務(wù)器對(duì)請(qǐng)求進(jìn)行處理,返回HTTP Response
- 斷開(kāi)連接,瀏覽器將Response中的body取出,解析成網(wǎng)頁(yè)界面
這就是一次網(wǎng)頁(yè)請(qǐng)求中發(fā)生的事情,需要注意的是,客戶端和服務(wù)器之間的通信是非持久連接的,當(dāng)服務(wù)器發(fā)送了應(yīng)答后,就斷開(kāi)連接,等待下一次的請(qǐng)求。(擴(kuò)展學(xué)習(xí):三次握手/四次揮手/DNS解析url的過(guò)程)
通過(guò)域名,我們一般可以進(jìn)入到網(wǎng)站的首頁(yè),但是一個(gè)網(wǎng)站系統(tǒng)當(dāng)然不止有一個(gè)頁(yè)面,那么網(wǎng)站之間的瀏覽又是怎么樣的呢?答案是url
何謂url?就拿當(dāng)前我正在編輯的這個(gè)網(wǎng)站來(lái)舉例吧
http://www.itdecent.cn/writer#/notebooks/22427209/notes/80422877/preview
https : 傳輸所用的協(xié)議,有http、https、ftp等
www.itdecent.cn:域名
80 :端口號(hào),默認(rèn)不寫(xiě)就是80
write ...preview:發(fā)送給服務(wù)器的數(shù)據(jù)
DNS的工作模式:
- 操作系統(tǒng)檢查本地的host文件是否已經(jīng)存在映射(所以本地host文件的配置可以禁用掉一些網(wǎng)站)
- 如果host中沒(méi)有映射,就去本地DNS查找緩存(如果之前DNS查找過(guò)會(huì)保留緩存)
- 如果緩存中也沒(méi)有,那就本地DNS服務(wù)器查找
- 如果本地服務(wù)器也沒(méi)有,那么就去根服務(wù)器查詢(xún)
HTTP Request請(qǐng)求
- 請(qǐng)求行
- 請(qǐng)求頭
請(qǐng)求體