通過瀏覽器訪問一個網站的背後到底經曆了什

來源:互聯網
上載者:User

標籤:meta   box   轉寄   web   var   user   for   使用者   tld   

通過瀏覽器訪問一個網站的背後到底經曆了什麼HTTP-Principle-01前言

來吧,隨我一起來整理下HTTP與DNS協議吧,無論你是Dev or Ops這些都是你必須要知道的基礎網路知識,如所示,我們把使用者訪問網站的流程大概分為了兩大部分:

  1. DNS(用於解析網域名稱的IP地址)
  2. HTTP(得到IP地址之後從伺服器擷取資料)

基於上面的兩個點,就讓我麼來深刻的討論下到底什麼是DNS and HTTP把。

What is DNS?

網域名稱系統(Domain Name System,縮寫:DNS)是互連網的一項服務。它作為將網域名稱和IP地址相互映射的一個分散式資料庫,能夠使人更方便地訪問互連網。DNS使用TCP和UDP連接埠53。當前,對於每頂層網域長度的限制是63個字元,網域名稱總長度則不能超過253個字元。

來自維基百科

DNS原理

如上所示,DNS實則就是把一個網域名稱轉換成了IP(A記錄)地址(雖然這隻是其中的一部分),那麼它是怎麼轉換的呢?為了理解這麼個東東,我們還是畫張圖來更好的理解它把,如所示:

HTTP-Principle-02

當使用者在瀏覽器輸入http://blog.ansheng.me,是如何得到對應伺服器的IP地址呢?具體步驟如下:

  1. 瀏覽器會在本地的緩衝中尋找是否存在當前訪問網域名稱的緩衝,如果有就返回資料,否則就繼續第二步,通常情況下瀏覽器都會緩衝網站的資料,為了就是加速訪問;
  2. 查看當前作業系統的hosts檔案是否寫有IP和網域名稱對應的關係,如果有則得到IP地址,否則繼續第三步;
  3. 通過本地的Local DNS擷取網域名稱對應的IP地址,那麼Local DNS其實就是我們的交換器或者路由器配置的DNS,通常情況下都有兩個,一個主一個輔;
  4. Local DNS會先看緩衝DNS中是否有這條記錄,如果沒有就繼續往下走,否則就返回IP地址;
  5. Local DNS會繼續請求根伺服器(.),根伺服器全球只有十三台,根伺服器也沒有blog.ansheng.me網域名稱的解析,但是根有.me網域名稱的解析,然後根就會繼續發起請求,當然只有在轉寄模式下才會這麼做。
  6. 根伺服器請求.me伺服器有沒有blog.ansheng.me網域名稱的解析,.me伺服器伺服器沒有對應的解析,但是我有ansheng.me網域名稱的解析,然後由.me伺服器繼續發起請求;
  7. .meDNS伺服器問ansheng.meDNS伺服器有沒有blog.ansheng.me網域名稱的解析,ansheng.meDNS伺服器說我有blog.ansheng.me網域名稱的解析;
  8. ansheng.meDNS伺服器把blog.ansheng.me網域名稱解析的IP地址返回給,.meDNS伺服器;
  9. .meDNS伺服器把記錄返回給根伺服器;
  10. 根伺服器把記錄返回給Local DNS伺服器
  11. Local DNS伺服器會把記錄還存在DNS Cache伺服器上,並且把記錄再次返回給瀏覽器;
  12. 瀏覽器得到了對應的IP地址後就向blog.ansheng.me對應的伺服器發起HTTP請求;
  13. blog.ansheng.me伺服器經過一些列的處理,最後把資料返回給瀏覽器,最後在頁面上展示;
  • 下面是未啟用轉寄模式工作流程

HTTP-Principle-03

  1. Local DNS伺服器向伺服器發起請求問有沒有blog.ansheng.me網域名稱的解析記錄;
  2. 伺服器說我沒有blog.ansheng.me網域名稱的解析記錄,但是我有.me的解析記錄,並且把.me的解析記錄返回給Local DNS伺服器;
  3. Local DNS伺服器得到.me的伺服器IP之後發起請求問:你有沒有blog.ansheng.me*網域名稱的解析記錄;
  4. .me伺服器說我沒有,但是我有ansheng.me網域名稱的解析記錄,並且把IP地址返回給Local DNS伺服器;
  5. Local DNS伺服器得到ansheng.me的伺服器IP之後又發起請求問:你有沒有blog.ansheng.me網域名稱的解析記錄;
  6. ansheng.me的伺服器說我有blog.ansheng.me網域名稱的解析記錄,並且把對應解析的記錄返回給Local DNS伺服器

不管用的是轉寄模式,還是根提示,最後都是把結果返回給Local DNS伺服器,由此DNS伺服器再返回給客戶機。

從瀏覽器到本地DNS伺服器是屬於遞迴查詢,而DNS伺服器之間就是的互動查詢就是迭代查詢

通過dig命令可以很清楚的看到解析流程:

1234567891011121314151617181920212223242526272829303132333435 [[email protected] ~]# dig +trace blog.ansheng.me ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> +trace blog.ansheng.me;; global options: +cmd. 4695 IN NS a.root-servers.net.. 4695 IN NS b.root-servers.net.. 4695 IN NS c.root-servers.net.. 4695 IN NS d.root-servers.net.. 4695 IN NS e.root-servers.net.. 4695 IN NS f.root-servers.net.. 4695 IN NS g.root-servers.net.. 4695 IN NS h.root-servers.net.. 4695 IN NS i.root-servers.net.. 4695 IN NS j.root-servers.net.. 4695 IN NS k.root-servers.net.. 4695 IN NS l.root-servers.net.. 4695 IN NS m.root-servers.net.;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 62 ms me. 172800 IN NS ns.nic.me.me. 172800 IN NS a2.me.afilias-nst.info.me. 172800 IN NS d0.cctld.afilias-nst.org.me. 172800 IN NS ns2.nic.me.me. 172800 IN NS b2.me.afilias-nst.org.me. 172800 IN NS c0.cctld.afilias-nst.info.me. 172800 IN NS a0.cctld.afilias-nst.info.me. 172800 IN NS b0.cctld.afilias-nst.org.;; Received 491 bytes from 202.12.27.33#53(202.12.27.33) in 678 ms ansheng.me. 86400 IN NS dns10.hichina.com.ansheng.me. 86400 IN NS dns9.hichina.com.;; Received 83 bytes from 199.254.61.1#53(199.254.61.1) in 86 ms blog.ansheng.me. 600 IN A 104.224.139.81;; Received 49 bytes from 140.205.228.13#53(140.205.228.13) in 182 ms
What is HTTP?

超文字傳輸通訊協定 (HTTP)(英文:HyperText Transfer Protocol,縮寫:HTTP)是互連網上應用最為廣泛的一種網路通訊協定。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源識別項(Uniform Resource Identifiers,URI)來標識。

來自維基百科

HTTP報文

HTTP報文有兩種:

  1. 請求報文(Request Message),用戶端向服務端發起的請求
  2. 響應報文(Response Message),服務端回應給用戶端的請求
  • 請求報文(Request Message)
報文 資訊
請求行 告訴伺服器我使用HTTP1.1的協議擷取(GET)/index.html這個資源
要求標頭 要求標頭由Key/Value組成,要求標頭部分的作用是用戶端把請求的相關資訊告訴伺服器
空行 告訴伺服器下面沒有要求標頭的資訊了
請求報文主體段 主體部分包含了要發給伺服器的資料
  • 響應報文(Response Message)
報文 資訊
起始行 協議及版本號碼,數字狀態代碼,狀態資訊
回應標頭部 Key/Value組成
空行 告訴伺服器下面沒有回應標頭的資訊了
請求報文主體段 一段字串(例如:HTML)
原理圖

下面的圖是通過fiddler軟體抓取的到要求標頭和回應標頭:

HTTP-Principle-04

在上面中我們可以看到要求標頭部分:

1234567891011121314 # 請求行GET https://www.ansheng.me/ HTTP/1.1# 要求標頭Host: www.ansheng.meConnection: keep-alivePragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2868.3 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding: gzip, deflate, sdch, brAccept-Language: zh-CN,zh;q=0.8Cookie: _gat=1; _ga=GA1.2.1463852464.1476801026# 因為是GET方法,所以就沒有請求報文主體

回應標頭:

12345678910111213141516171819202122 # 起始行HTTP/1.1 200 OK# 回應標頭部Server: nginxDate: Tue, 18 Oct 2016 17:22:35 GMTContent-Type: text/html; charset=utf-8Last-Modified: Sun, 02 Oct 2016 05:51:17 GMTTransfer-Encoding: chunkedConnection: keep-aliveVary: Accept-EncodingETag: W/"57f0a055-9fc"Expires: Fri, 21 Oct 2016 17:22:35 GMTCache-Control: max-age=259200Content-Encoding: gzip# 空行 # 請求報文主體段,在瀏覽器是不會亂碼的2da V n 0 W ; F S M, R HH Q L ? 5 l v ? ? } y2 $ y s [ { , _s/. w? vi{ q 8 *** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***
 

 

 

通過瀏覽器訪問一個網站的背後到底經曆了什

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.