1. 程式人生 > >(譯)Web是如何工作的:給Web開發新手的初級讀物

(譯)Web是如何工作的:給Web開發新手的初級讀物

又是 不知道 16px really 工程 mil 消息 image rar

原文地址:https://medium.freecodecamp.org/how-the-web-works-a-primer-for-newcomers-to-web-development-or-anyone-really-b4584e63585c 如果你剛開始學習Web開發,你可能會認為你知道網絡是如何工作的——至少基本上是這樣的。 ……但是當你嘗試去解釋一個簡單網站是如何工作的時,頭腦卻是一片空白。IP地址又意味著什麽?“客戶端——服務器端”具體又是如何運作的? 事實上,在有功能強大的開發框架的今天,對於一些新手很容易就忽略掉對Web的基礎認識。 我知道,我曾經就是這樣的,這沒有什麽不好意思承認的。Web是復雜的,只有當你開始後端工程師的生涯時,你才會意識到這些基礎的重要性。(如果你想寫出一個能夠正常運行的Web程序。)
所以,我把每個人都應該掌握的基礎知識寫成了四個部分的引導文章,無論你是以Web開發為職業,還是僅僅是抱著學習的興趣,都可以看看: 第一部分:Web是如何工作的 第二部分:Web程序的結構 第三部分:HTTP和REST 第四部份:客戶端與服務端互動的示例代碼

一個基礎的網頁搜索

讓我們從我們都做過的事情開始講解:你在瀏覽器的地址欄裏敲入“www.github.com”後,頁面將會加載在瀏覽器裏。 這個操作看起來很簡單,它後面其實發生了許多神奇的事情,我們現在就來一探究竟。

Web組成部分的定義

了解Web是比較難的,因為它包含了很多術語。 不幸的是,部分術語決定了你能否理解接下來的文章。
如果你想知道萬維網的秘密,以下是一些你必須理解的重要術語: 客戶端:就是一個運行在電腦上,用來連接因特網的程序,比如谷歌瀏覽器或火狐瀏覽器。它的主要角色是接受用戶的輸入,並按用戶輸入去請求另一臺稱之為web服務器的電腦。盡管我們通常使用瀏覽器去訪問網頁,但是你可以把你的整臺電腦當作客戶端-服務器模型中的“客戶端”。每一臺客戶端電腦都有唯一標識的地址——IP地址,這樣其它電腦就能根據IP地址去識別它。 服務器:連接互聯網的機器,它也有一個IP地址。一臺服務器是等待其它機器(比如說客戶端)的請求,並響應它們。不像你擁有IP地址的電腦(比如說客戶端),服務器是安裝和運行著特殊的服務器軟件,這些軟件來告訴服務器如何去回應來自你瀏覽器的請求。Web服務器的主要功能是存儲、處理和傳送網頁至客戶端。服務器有很多種類型,比如Web服務器、數據庫服務器、文件服務器和應用程序服務器等等。(在這篇文章中,我們談論的是Web服務器。)
IP地址:網際協議地址,在TCP/IP網絡中,它是一臺設備(電腦、服務器、打印機、路由器等)的數字標識。在互聯網中的每一臺電腦都有一個IP地址,它用來識別與其他電腦的通信。IP地址是由四組數字,通過點來隔開的字符串(比如224.155.65.2)。這也稱之為“邏輯地址”。為了定位網絡中的設備,通過TCP/IP協議軟件把邏輯IP地址轉換成一個物理地址,這個物理地址是燒制在你的硬件中的。 ISP:網絡服務提供商。ISP是一個在客戶端和服務器之間的中間商。對於典型的家庭,ISP通常是“電纜公司”。當你的瀏覽器接受去www.github.com的請求時,它是不知道去哪裏查找www.github.com的,所以這是ISP的工作,ISP通過DNS查找你試圖訪問的站點所對應的IP地址。 DNS:域名系統。DNS是一個分布式數據庫,用來跟進互聯網上電腦域名與它們相對應的IP地址記錄。在目前不用去操心“分布式數據庫”是如何工作的,只要知道DNS的存在使得用戶輸入的www.github.com可以用一個IP地址代替。 域名:用來標識一個或多個IP地址。用戶使用域名(比如www.github.com)去互聯網上瀏覽一個網站。但你在瀏覽器裏敲入域名,DNS查找其對應的IP地址。 TCP/IP:傳輸控制協議/因特網互聯協議。TCP/IP是使用最廣泛的通信協議。“協議”只是一系列規則做什麽的標準,TCP/IP是用來作為網絡間傳送數據的標準協議。 端口號:是一個16位的整型數字,用來標識服務器上具體的端口,端口通常是與IP地址關聯起來的。它作為識別服務器上特定進程的一種方式,將網絡請求轉發到服務器上。 主機:連接網絡的電腦——它可以使客戶端、服務器或者任意類型的設備。每一臺主機都有一個唯一的IP地址。就拿www.google.com這個網站來說,主機可以是Web服務器,用來給該網站提供網頁服務。主機與服務器通常容易引起混淆,但是註意它們兩個是不同的東西。服務器是主機中的一種——它們是一種特指的機器。另一方面,一臺主機可能涉及整個組織,該組織提供一個托管服務來維護多個Web服務器。按這個意義來說,你可以一臺主機上運行一個服務。 HTTP:超文本傳輸協議。該協議是瀏覽器和Web服務器在互聯網間通信用的。 URL:統一資源定位符。URL是用來標識一個特定的Web資源。就拿https://github.com/someone這個簡單的例子來說,這個URL規定了使用的協議(“https”),主機名(github.com)和文件名(某人的個人資料頁面)。一個用戶可以拿這個URL,通過HTTP從一個域名為github的主機上獲得這個網頁資源。

從代碼到網頁的旅程

現在我們對這旅程中主要名詞有了一定的了解,讓我們通過github搜索來看下,我們是如何通過在地址欄裏輸入一個URL到達對應的網頁的: 1、在你的瀏覽器裏輸入URL 技術分享圖片 2、瀏覽器解析這個URL所包含的信息。這個URL包含了使用的協議(“https”),主機名(github.com)以及資源(“/”)。在這個例子中,“.com”後面沒有任何東西去指向一個特指的資源,所以瀏覽器就知道只檢索主頁。 技術分享圖片 3、瀏覽器與ISP通信,通過DNS查找主機名為www.github.com的Web服務器所對應的IP地址。DNS服務將先聯系根域名服務器,該服務器將查找https://www.github.com,並取得“.com”頂級域名的域名服務器對應的IP地址,然後將這個IP地址返回給你的DNS服務。DNS服務對“.com”做擴展查詢https://www.github.com對應的IP地址。 技術分享圖片來源: https://technet.microsoft.com/en-us/library/bb962069.aspx 4、一旦ISP接受到目標服務器對應的IP地址,它就會把這個IP地址發送給你的瀏覽器。 技術分享圖片 5、你的瀏覽器將拿這個IP地址和URL中的端口號(HTTP協議默認端口號是80,HTTPS默認端口號是443),打開一個TCP套接字連接。這時,你的瀏覽器和服務器就建立了連接。 6、你的瀏覽器發送一個HTTP請求至Web服務器,去獲取www.github.com的主頁。 技術分享圖片 7、Web服務器接收請求,並查找HTML頁面。如果該頁面存在,該Web服務器準備響應並把它發回給你的瀏覽器。如果服務器找不到你請求的頁面,它將發送一個404錯誤消息,404表示“頁面未找到” 技術分享圖片 8、你的瀏覽器把它接收到的HTML頁面從頭到尾掃描一遍,並去尋找其它相關的資源,如圖片、CSS文件、JavaScript腳本文件等等。 技術分享圖片 9、在網頁中涉及的其它資源,服務器會重復上面的步驟去發起HTTP請求每個相應的資源。 10、一旦瀏覽器加載完HTML涉及到的所有資源,頁面最終會加載在瀏覽器窗體裏,並關閉與服務器的連接。 技術分享圖片

跨越互聯網的深淵

一件值得註意的是,當你發起一個請求時,你請求獲取的信息是如何傳送的。當你發起一個請求,這些信息是拆分成許多小塊的,我們稱之為包,每一個包包含TCP頭部,這個頭部裏包含了源主機和目的主機的端口號,以及IP頭部包含源主機和目的主機的IP地址。然後這個包通過以太網、WiFi和蜂窩網絡傳輸,並允許在任何路徑上進行傳輸,並在到達最終目的地時獲取盡可能多的跳轉。 (事實上我們並不關心包是如何到達目的地的,我們關心的是這些包能夠安全地傳送到目的主機),一旦這些包到達目的主機,它們將再次組合起來,當成一個整體進行傳送。 那麽所有這些包是怎麽知道它們應如何到達目的主機,而不丟失任何包的呢? 答案就是TCP/IP。 TCP/IP是兩部分組成的,它的功能是作為因特網的基本“控制系統”。IP表示因特網互聯協議,它的主要任務是通過每個包的IP頭部(例如IP地址)去發送和尋找路徑傳送到其它電腦。第二部分是傳輸控制協議(TCP),它的任務是拆分信息或者是把文件拆成小包,通過TCP頭部把包路由至目的電腦相應的應用上,如果包發生丟失時,就重新發送,一旦當他們都到達另一端時,就按正確的順序組裝起來。

描繪最終的圖形

等等,任務還未完成。現在你的瀏覽器已經取得了網站首頁的全部資料(HTML、CSS、JavaScript、圖片等等),它還得經過幾步把這些資源以人可讀的網頁的方式呈現。 你的瀏覽器有一個渲染引擎,它就是負責展示內容的。這個渲染引擎以小塊的方式接受所有資源的內容,然後通過HTML解析算法告訴瀏覽器如何解析這些資源。 一旦解析完成,它會生成一個由DOM元素組成的結構樹,DOM代表文檔對象模型,它是在HTML文檔中如何呈現所有對象位置的一種約定。每個文檔中的對象或者說節點,可以使用腳本語言,如JavaScript,去操作它們。 技術分享圖片 構建了DOM樹之後,將對樣式表進行解析,以了解如何對每個節點進行樣式化。使用上面的信息,瀏覽器從上至下遍歷DOM節點,並計算每個節點的CSS樣式、位置、坐標等等。 一旦瀏覽器取得了DOM節點和它們的樣式,它最終根據你的屏幕準備繪制頁面。最終頁面就是你之前在網絡上看到的頁面一樣。 Web是復雜的,但是你已經了解了其中難懂的一部分 以上就是Web的一個概括,迷失了嗎?我們都有迷失,但是你已經讀到了這,你已經了解了難懂的一部分。我在這裏顯然跳過了一些細節,以一種有趣的方式向你展示它的全圖,但是如果你的思路能跟上上面概述的基本順序,那細節上的填補將是小菜一碟。 在下一部分,我們將處理基本web應用程序的結構。

(譯)Web是如何工作的:給Web開發新手的初級讀物