????? 本節我們介紹Web服務器的工作原理是什么?如果我們要在GO語言中搭建Web服務器我們需要了解那些基礎知識呢?
? ? ?對于我們普通上網過程,系統其實是這樣做的,相比有相關網絡基礎的人,也了解一些;瀏覽器(谷歌瀏覽器、IE瀏覽器、火狐瀏覽器、360瀏覽器等)本身是一個客戶端,當你輸入URL的時候,瀏覽器首先會去請求DNS服務器,通過DNS服務器獲取相應域名的IP,然后通過IP地址找到對應的服務器后,要求建立TCP連接,等瀏覽器發送完HTTP Request(請求)包后,服務器接收到請求包之后才開始處理請求包,服務器調用自身服務,返回HTTP Response (響應)包;客戶端收到來自服務器的響應后開始渲染這個Response包里的主體(body),等收到全部內容,隨后斷開與服務器之間的TCP連接。
?????? 一個Web服務器也被稱為HTTP服務器,它通過HTTP協議與客戶端通信。這個客戶端通常指Web瀏覽器,我們常用的手機訪問網頁的過程也是一樣的。
????? URL和DNS是什么呢?URL(Uniform Resource Locator)是“統一資源定位符”的英文縮寫,用于描述一個網絡上的資源;DNS(Domain Name System)是“域名系統“的英文縮寫,是一種組織成域層次結構的計算機和網絡服務器域名系統,它用于TCP/IP網絡,它從事將主機名或域名轉換為實際IP地址的工作。估計不是學習計算機專業的人都不太了解DNS的解析過程,我們來看看DNS解析的過程是怎么樣的:
????? 1. 在瀏覽器中輸入www.abc.com域名,操作系統會檢查本機的hosts文件是否有這個網址的映射關系,如果有,就先用這個IP地址映射,完成域名解析。
????? 2. 如果hosts里面沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關系,如果有,直接返回,返回域名解析。
???? 3. 如果以上都沒有相應的映射關系,首先會找TCP/IP參數設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此域名解析具有權威性。
???? 4. 如果要查詢的域名,不由本地DNS服務器區域解析,但是該服務器已經緩存了此網址映射關系,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。
???? 5. 如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至“根DNS服務器”,“根DNS服務器”收到請求后會判斷這個域名(.com)是誰來授權管理,并返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息后,將會聯系負責.com域的這臺服務器。這臺負責.com域服務器收到請求后,如果直接無法解析,它就會找管理.com域的下一級DNS服務器地址給本地DNS服務器。本地DNS收到返回的地址后就會查找管理的域服務器直到找到為止。
????? 6. 如果用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,如果上一級也無法解析,找到根DNS或把轉請求至上上級以此循環。不管是本地DNS轉發還是根據提示,最后都是把結果返回給本地DNS服務器,由此DNS服務器返回給客戶機。
? ? ? 接下來我們看看Web工作的核心HTTP協議,了解HTTP是怎樣工作的,HTTP請求有幾種,常用的有幾種。
? ??? HTTP是一種讓Web服務器與瀏覽器通過Internet發送與接收數據的協議,它建立在TCP協議之上,一般采用的80端口。它是一個請求、響應協議一客戶端發出一個請求,服務器響應這個請求。
?????? HTTP定義了多種與服務器交互的請求方法,最基本的有4種,分別是GET、POST、PUT、DELETE。我們最常見的是GET和POST。
?????? HTTP協議是無狀態的,同一個客戶端的這次請求和上次請求時沒有對應關系的,對于HTTP服務器來說,它并不知道這兩個請求是否來自同一個客戶端。為了解決這個問題,Web程序引入了Cookie機制來維護連接的可持續狀態。
? ? ?請開始你的表演,踐行,踐行,再踐行。未完待續。。。