Web的诞生和网络基础 | 读《图解HTTP》
當今互聯(lián)網(wǎng)的由來
蒂姆·伯納斯·李在1989年的時候提出一種設想,借助多文檔之間的相互關(guān)聯(lián)形成的超文本(HyperText),連成可相互參閱的WWW(World wide web,萬維網(wǎng))。
對于這個想法,李爵士(伊麗莎白二世給他發(fā)了爵士勛章)也提出了三個相應的解決方案:HTML,承載超文本內(nèi)容;URL,標明文檔所在的唯一地址;HTTP,文檔在各個機器之間傳遞的協(xié)議。所以,李爵士可以說是FEer的祖師爺。
HTML和HTTP的發(fā)展
最早期的網(wǎng)頁是非常簡單的,只有簡單的文字呈現(xiàn)和超鏈接跳轉(zhuǎn),能夠顯示圖片都已經(jīng)很了不起了。此外,最開始的時候,是沒有CSS的,頁面上的樣式都由<center> <big>這樣的標簽來改變。直到1994年的時候,HTML 1.0已經(jīng)經(jīng)過了多次版本更迭,CSS才被提出。
HTTP的發(fā)展經(jīng)歷了0.9 -> 1.0 -> 1.1 的變動。盡管HTTP2.0早已到來,但大部分瀏覽器使用的仍是1.1版本。我之前的一次面試就被問到2.0中包含了那些新特性。詳見這里。
互聯(lián)網(wǎng)&萬維網(wǎng)
書中沒有提及這一點,但我認為有不少人對這兩個詞沒有清楚的概念。有一點很好區(qū)分的是,在上面說到李爵士的設想時,萬維網(wǎng)是建立在相互連接的超文本上的。但除去查看超文本外,電腦還可以做更多的事,比如發(fā)郵件(SMTP)、文件傳輸(FTP)等,這些就不能稱為萬維網(wǎng)了,應該是互聯(lián)網(wǎng)。在協(xié)議層面上來說,我們說萬維網(wǎng)其實是在說HTTP,而互聯(lián)網(wǎng)在應用層遠不止HTTP這一個協(xié)議,還包括諸如上面提到SMTP、FTP等協(xié)議。萬維網(wǎng)是包含在互聯(lián)網(wǎng)中的一個功能,所以你可以籠統(tǒng)地認為,在瀏覽器的范圍內(nèi)都是萬維網(wǎng)。
網(wǎng)絡基礎(chǔ)TCP/IP
之前說到的HTTP協(xié)議只是TCP/IP協(xié)議族中應用層中的一個協(xié)議。TCP/IP 協(xié)議存在的必要性,如同人類世界中雙方的溝通需要使用都理解的符合規(guī)范的語言,計算機之間的溝通更是需要基于相同的方法。
不同的硬件、操作系統(tǒng)之間的通信,所有的這一切都需要一種規(guī)則。而我們把這種規(guī)則稱為協(xié)議(protocol)。TCP/IP協(xié)議族按層次分為應用層、傳輸層、網(wǎng)絡層和數(shù)據(jù)鏈路層。應用層最靠近用戶,越往后越底層。
應用層向用戶提供應用服務,包含F(xiàn)TP、DNS和HTTP等協(xié)議,開發(fā)者基于這些協(xié)議進行應用開發(fā)。
傳輸層提供處于網(wǎng)絡連接中的兩臺計算機之間的數(shù)據(jù)傳輸,包含TCP和UDP協(xié)議。
網(wǎng)絡層用來處理在網(wǎng)絡上流動的數(shù)據(jù)包,規(guī)定了通過怎樣的路徑到達對方計算機,并把數(shù)據(jù)包傳送給對方。
鏈路層用來處理連接網(wǎng)絡的硬件部分,硬件上的范疇均在鏈路層的作用范圍之內(nèi)。
在進行網(wǎng)絡通信時,會通過分層順序與對方進行通信,發(fā)送端從應用層往下走,接收端則從鏈路層往上走。
與HTTP關(guān)系密切的協(xié)議:IP、TCP和DNS
前面說到IP協(xié)議的作用就是把各種數(shù)據(jù)包傳送給對方。而要保證確實傳送到對方那里,則需要滿足各類條件,其中兩個重要的條件是IP地址和MAC地址。IP地址指明了節(jié)點被分配到的地址,MAC地址是指網(wǎng)卡所屬的固定地址。IP地址可以和MAC地址配對。由于網(wǎng)絡的變動,IP地址會變動,但MAC地址基本上不會更改。
通信雙方的連接一般需要通過多臺計算機和網(wǎng)絡設備的中轉(zhuǎn),在進行中轉(zhuǎn)的時候,會利用下一站中轉(zhuǎn)設備的MAC地址來搜索下一個中轉(zhuǎn)目標。不斷獲取連接路線的這個過程稱為路由選擇。
前面說到傳輸層包含TCP和UDP協(xié)議,TCP是能夠確保可靠的協(xié)議。可靠在這里的含義是無論如何它都會確保數(shù)據(jù)最終到達另一方。說到可靠性保證,就無法不提三次握手。請求端首先發(fā)送一個帶SYN(synchronize)標志的數(shù)據(jù)包給對方,接收端收到后,回傳一個帶有一個帶有SYN和ACK(acknowledgement)標志的數(shù)據(jù)包以示傳達確認信息(這一步表明接收端能正常接收請求端消息)。最后,發(fā)送端再回傳一個帶ACK標志的數(shù)據(jù)包,代表“握手”結(jié)束(表明請求端可以接收到接收端回傳的消息)。
負責域名解析的DNS服務
真正標識一個計算機位置的是IP地址,但對于每個網(wǎng)站我們使用的是域名,所以在每個請求發(fā)送前,需要到DNS服務器查詢該域名對應的IP地址。域名系統(tǒng)在應用層上使用的就是UDP(user data? protocol用戶數(shù)據(jù)報協(xié)議)。UDP相較于TCP較為明顯的不同之處在于,UDP不保證消息的可靠傳遞,但是速度比TCP快。
各種協(xié)議與HTTP協(xié)議的關(guān)系
其實這就是著名面試題“在瀏覽器輸入域名按下回車后發(fā)生的事”的答案。在通過域名系統(tǒng)獲得目標網(wǎng)站IP地址后,HTTP協(xié)議會生成針對目標Web服務器的HTTP請求報文;到達傳輸層后,TCP協(xié)議為了方便通信,將HTTP請求分割成有序的報文段;在網(wǎng)絡中,IP協(xié)議搜索對方的地址,一邊中轉(zhuǎn)一邊傳送;到達目標服務器后,TCP協(xié)議將接受到的被分割的報文段重組成報文,HTTP協(xié)議對請求的內(nèi)容進行響應,回傳請求內(nèi)容。當然,若要說答案,這只能說是基于各協(xié)議層面上非常粗略的一份。在這些之外,還涉及到內(nèi)容緩存、過期時間、render tree構(gòu)建和渲染等其他知識。
URI和URL
URI是統(tǒng)一資源標識符,URL是統(tǒng)一資源定位符。URI是由某個協(xié)議方案表示的資源定位標識符。URL是URI的子集。
http://www.baidu.com:80/dir/index.html?id=9#chapter1復制代碼上面是我瞎寫的一個URL,其中http是協(xié)議方案名;www.baidu.com:80是服務器地址,因為80是默認端口,所以一般不寫,但開發(fā)環(huán)境中我們就會見到需要填寫端口的情況;dir/index.html是帶層次的文件路徑;?id=9是查詢字符串;#chapter1是片斷標識符,即一個頁面中的錨點,有它打開后會直接到頁面中錨點所在位置。
書中沒有說到一個點是同源策略,同源策略是指協(xié)議相同,域名相同,端口相同。同源策略的目的是為了保證用戶信息的安全,防止惡意的網(wǎng)站竊取數(shù)據(jù)。
自說自話
這本書不厚,但內(nèi)容豐富足夠,之前較為快速的翻閱過一遍,現(xiàn)在已經(jīng)忘的差不多。在看第二遍的時候準備以上面的形式記錄下來。關(guān)于內(nèi)容的形式,也有思考過,現(xiàn)在是章節(jié)和小標題基本以書中為標準,每一小節(jié)的內(nèi)容有的參考書上,有不少會用自己的話總結(jié)下,另外還會補充一些書中沒有提及,但我有這個疑惑或者我覺得有必要提及的也會加到內(nèi)容中。關(guān)于內(nèi)容的組織形式,歡迎大佬們提更好的建議。
謝謝看完^_^,歡迎點贊。
總結(jié)
以上是生活随笔為你收集整理的Web的诞生和网络基础 | 读《图解HTTP》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 春季学期第十一周作业
- 下一篇: Nike推Nike Fit可轻松丈量足部