Web的诞生和网络基础 | 读《图解HTTP》
當今互聯網的由來
蒂姆·伯納斯·李在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是能夠確??煽康膮f議。可靠在這里的含義是無論如何它都會確保數據最終到達另一方。說到可靠性保證,就無法不提三次握手。請求端首先發送一個帶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是片斷標識符,即一個頁面中的錨點,有它打開后會直接到頁面中錨點所在位置。
書中沒有說到一個點是同源策略,同源策略是指協議相同,域名相同,端口相同。同源策略的目的是為了保證用戶信息的安全,防止惡意的網站竊取數據。
自說自話
這本書不厚,但內容豐富足夠,之前較為快速的翻閱過一遍,現在已經忘的差不多。在看第二遍的時候準備以上面的形式記錄下來。關于內容的形式,也有思考過,現在是章節和小標題基本以書中為標準,每一小節的內容有的參考書上,有不少會用自己的話總結下,另外還會補充一些書中沒有提及,但我有這個疑惑或者我覺得有必要提及的也會加到內容中。關于內容的組織形式,歡迎大佬們提更好的建議。
謝謝看完^_^,歡迎點贊。
總結
以上是生活随笔為你收集整理的Web的诞生和网络基础 | 读《图解HTTP》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 春季学期第十一周作业
- 下一篇: Nike推Nike Fit可轻松丈量足部