Web的誕生和網路基礎 | 讀《圖解HTTP》

劉一筆發表於2019-05-12

當今網際網路的由來

蒂姆·伯納斯·李在1989年的時候提出一種設想,藉助多文件之間的相互關聯形成的超文字(HyperText),連成可相互參閱的WWW(World wide web,全球資訊網)。

對於這個想法,李爵士(伊麗莎白二世給他發了爵士勳章)也提出了三個相應的解決方案:HTML,承載超文字內容;URL,標明文件所在的唯一地址;HTTP,文件在各個機器之間傳遞的協議。所以,李爵士可以說是FEer的祖師爺。

HTML和HTTP的發展

最早期的網頁是非常簡單的,只有簡單的文字呈現和超連結跳轉,能夠顯示圖片都已經很了不起了。此外,最開始的時候,是沒有CSS的,頁面上的樣式都由<center> <big>這樣的標籤來改變。直到1994年的時候,HTML 1.0已經經過了多次版本更迭,CSS才被提出。

HTTP的發展經歷了0.9 -> 1.0 -> 1.1 的變動。儘管HTTP2.0早已到來,但大部分瀏覽器使用的仍是1.1版本。我之前的一次面試就被問到2.0中包含了那些新特性。詳見這裡

網際網路&全球資訊網

書中沒有提及這一點,但我認為有不少人對這兩個詞沒有清楚的概念。有一點很好區分的是,在上面說到李爵士的設想時,全球資訊網是建立在相互連線的超文字上的。但除去檢視超文字外,電腦還可以做更多的事,比如發郵件(SMTP)、檔案傳輸(FTP)等,這些就不能稱為全球資訊網了,應該是網際網路。在協議層面上來說,我們說全球資訊網其實是在說HTTP,而網際網路在應用層遠不止HTTP這一個協議,還包括諸如上面提到SMTP、FTP等協議。全球資訊網是包含在網際網路中的一個功能,所以你可以籠統地認為,在瀏覽器的範圍內都是全球資訊網。

網路基礎TCP/IP

之前說到的HTTP協議只是TCP/IP協議族中應用層中的一個協議。TCP/IP 協議存在的必要性,如同人類世界中雙方的溝通需要使用都理解的符合規範的語言,計算機之間的溝通更是需要基於相同的方法。

不同的硬體、作業系統之間的通訊,所有的這一切都需要一種規則。而我們把這種規則稱為協議(protocol)。

TCP/IP協議族按層次分為應用層、傳輸層、網路層和資料鏈路層。應用層最靠近使用者,越往後越底層。

應用層向使用者提供應用服務,包含FTP、DNS和HTTP等協議,開發者基於這些協議進行應用開發。

傳輸層提供處於網路連線中的兩臺計算機之間的資料傳輸,包含TCP和UDP協議。

網路層用來處理在網路上流動的資料包,規定了通過怎樣的路徑到達對方計算機,並把資料包傳送給對方。

鏈路層用來處理連線網路的硬體部分,硬體上的範疇均在鏈路層的作用範圍之內。

在進行網路通訊時,會通過分層順序與對方進行通訊,傳送端從應用層往下走,接收端則從鏈路層往上走。

與HTTP關係密切的協議:IP、TCP和DNS

前面說到IP協議的作用就是把各種資料包傳送給對方。而要保證確實傳送到對方那裡,則需要滿足各類條件,其中兩個重要的條件是IP地址和MAC地址。IP地址指明瞭節點被分配到的地址,MAC地址是指網路卡所屬的固定地址。IP地址可以和MAC地址配對。由於網路的變動,IP地址會變動,但MAC地址基本上不會更改。

通訊雙方的連線一般需要通過多臺計算機和網路裝置的中轉,在進行中轉的時候,會利用下一站中轉裝置的MAC地址來搜尋下一個中轉目標。不斷獲取連線路線的這個過程稱為路由選擇。

前面說到傳輸層包含TCP和UDP協議,TCP是能夠確保可靠的協議。可靠在這裡的含義是無論如何它都會確保資料最終到達另一方。說到可靠性保證,就無法不提三次握手。請求端首先傳送一個帶SYN(synchronize)標誌的資料包給對方,接收端收到後,回傳一個帶有一個帶有SYN和ACK(acknowledgement)標誌的資料包以示傳達確認資訊(這一步表明接收端能正常接收請求端訊息)。最後,傳送端再回傳一個帶ACK標誌的資料包,代表“握手”結束(表明請求端可以接收到接收端回傳的訊息)。

負責域名解析的DNS服務

真正標識一個計算機位置的是IP地址,但對於每個網站我們使用的是域名,所以在每個請求傳送前,需要到DNS伺服器查詢該域名對應的IP地址。域名系統在應用層上使用的就是UDP(user data  protocol使用者資料包協議)。UDP相較於TCP較為明顯的不同之處在於,UDP不保證訊息的可靠傳遞,但是速度比TCP快。

各種協議與HTTP協議的關係

其實這就是著名面試題“在瀏覽器輸入域名按下回車後發生的事”的答案。在通過域名系統獲得目標網站IP地址後,HTTP協議會生成針對目標Web伺服器的HTTP請求報文;到達傳輸層後,TCP協議為了方便通訊,將HTTP請求分割成有序的報文段;在網路中,IP協議搜尋對方的地址,一邊中轉一邊傳送;到達目標伺服器後,TCP協議將接受到的被分割的報文段重組成報文,HTTP協議對請求的內容進行響應,回傳請求內容。當然,若要說答案,這隻能說是基於各協議層面上非常粗略的一份。在這些之外,還涉及到內容快取、過期時間、render tree構建和渲染等其他知識。

URI和URL

URI是統一資源識別符號,URL是統一資源定位符。URI是由某個協議方案表示的資源定位識別符號。URL是URI的子集。

http://www.baidu.com:80/dir/index.html?id=9#chapter1複製程式碼

上面是我瞎寫的一個URL,其中http是協議方案名;www.baidu.com:80是伺服器地址,因為80是預設埠,所以一般不寫,但開發環境中我們就會見到需要填寫埠的情況;dir/index.html是帶層次的檔案路徑;?id=9是查詢字串;#chapter1是片斷識別符號,即一個頁面中的錨點,有它開啟後會直接到頁面中錨點所在位置。

書中沒有說到一個點是同源策略,同源策略是指協議相同,域名相同,埠相同。同源策略的目的是為了保證使用者資訊的安全,防止惡意的網站竊取資料。

自說自話

這本書不厚,但內容豐富足夠,之前較為快速的翻閱過一遍,現在已經忘的差不多。在看第二遍的時候準備以上面的形式記錄下來。關於內容的形式,也有思考過,現在是章節和小標題基本以書中為標準,每一小節的內容有的參考書上,有不少會用自己的話總結下,另外還會補充一些書中沒有提及,但我有這個疑惑或者我覺得有必要提及的也會加到內容中。關於內容的組織形式,歡迎大佬們提更好的建議。

謝謝看完^_^,歡迎點贊。


相關文章