這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在用go開發web程式前,必須瞭解HTTP協議,對於沒有接觸過的人來說,強烈建議看下這兩本書:《HTTP權威指南》和《圖解HTTP》。
HTTP概述
我們平時上網,開啟瀏覽器,輸入網址後按下斷行符號鍵,相應的Web頁面就顯示出來了。那這個過程到底是如何?的呢?
先來看下面一張圖:
很清楚的描述了一個使用者訪問一個web網站的過程。分為三步:
1. 通過用戶端也就是瀏覽器輸入URL網址,用戶端通過DNS協議與DNS服務網路互動,擷取網域名稱對應的IP地址。
2. 瀏覽器再通過IP地址找到對應的IP伺服器,並建立串連。瀏覽器發送 HTTP Request 包,伺服器處理請求包,並返回 HTTP Response 包
3. 瀏覽器收到響應包後,繪製頁面,等所有內容收到後,斷開與該伺服器之間的TCP串連
DNS解析
DNS是“網域名稱系統”的英文縮寫,是一種組織成域階層的電腦
和網路服務命名系統,它用於 TCP/IP 網路,它從事將主機名稱或網域名稱轉換為實際 IP 位址的工作。
DNS解析流程
是 DNS 解析的整個流程。
更詳細的DNS即系過程如下:
- 在瀏覽器中輸入www.qq.com網域名稱,作業系統會先檢查自己本地的hosts檔案是否有這個網址映射關係,如果有,就先調用這個IP地址映射,完成網域名稱解析。
- 如果hosts裡沒有這個網域名稱的映射,則尋找本地DNS解析器緩衝,是否有這個網址映射關係,如果有,直接返回,完成網域名稱解析。
- 如果hosts與本地DNS解析器緩衝都沒有相應的網址映射關係,首先會找TCP/IP參數中設定的首選DNS伺服器,在此我們叫它本地DNS伺服器,此伺服器收到查詢時,如果要查詢的網域名稱,包含在本地配置地區資源中,則返回解析結果給客戶機,完成網域名稱解析,此解析具有權威性。
- 如果要查詢的網域名稱,不由本地DNS伺服器地區解析,但該伺服器已緩衝了此網址映射關係,則調用這個IP地址映射,完成網域名稱解析,此解析不具有權威性。
- 如果本地DNS伺服器本地地區檔案與緩衝解析都失效,則根據本地DNS伺服器的設定(是否設定轉寄站)進行查詢,如果未用轉寄模式,本地DNS就把請求發至13台根DNS,根DNS伺服器收到請求後會判斷這個網域名稱(.com)是誰來授權管理,並會返回一個負責該頂級網域名稱伺服器的一個IP。本地DNS伺服器收到IP資訊後,將會聯絡負責.com域的這台伺服器。這台負責.com域的伺服器收到請求後,如果自己無法解析,它就會找一個管理.com域的下一級DNS伺服器位址(qq.com)給本地DNS伺服器。當本地DNS伺服器收到這個地址後,就會找qq.com網域服務器,重複上面的動作,進行查詢,直至找到www.qq.com主機。
- 如果用的是轉寄模式,此DNS伺服器就會把請求轉寄至上一級DNS伺服器,由上一級伺服器進行解析,上一級伺服器如果不能解析,或找根DNS或把轉請求轉至上上級,以此迴圈。不管是本地DNS伺服器用是是轉寄,還是根提示,最後都是把結果返回給本地DNS伺服器,由此DNS伺服器再返回給客戶機。
DNS協議
閱讀結合Wireshark分析DNS 協議可以對DNS協議報文有一個初步的瞭解;更詳細的應閱讀《TCP/IP詳解 卷1 協議》。
HTTP協議
詳細的協議閱讀《HTTP權威指南》和《圖解HTTP》。提供這兩本書的下載地址:http://download.csdn.net/detail/uudou/9642228