前段時間在處理iOS端的HTTPDNS相關SDK,在接入和測試環節發現你們對HTTP的總體請求流程包括HTTP劫持原理以及HTTPDNS的工做原理並非太清楚,因此寫下這邊文章幫助你們深刻web請求過程:如何發起請求,HTTP協議解析,DNS域名解析。web
當咱們在手機端請求一個@"www.baidu.com"的域名的時候數據庫
1.請求到達運營商的DNS服務器並由其把這個域名解析成對應的IP地址。瀏覽器
2.根據IP地址在互聯網上找到對應的服務器,向這個服務器發起一個get\post請求。緩存
3.由這個服務器找到對應的資源原路返回給訪問的用戶。服務器
這裏只是一個大概的流程實際每一步都有複雜的結構和邏輯例如:服務器可能有不少臺,到底指定哪臺服務器來處理請求,須要一個負載均衡設備來平均分配全部用戶的請求。請求的數據是存儲在分佈式緩存中仍是一個靜態文件中,或是在數據庫裏。當數據返回瀏覽器時,瀏覽器解析數據發現還有一些靜態資源(如CSS、JS或者圖片)時又會發起另外的HTTP請求,而這些請求極可能會在CDN上,那麼CDN服務器上又會處理這個用戶的請求。markdown
咱們使用HTTPDNS的主要目的就是解決HTTP劫持問題。HTTP的劫持分兩種第一種是DNS劫持,第二種是內容劫持,後者是基於前者的基礎上發展出來,是比較高級的劫持手段,目前無解,下面來分開講解:網絡
1.系統會檢查瀏覽器緩存中有沒有這個域名對應的解析過的IP地址,若是緩存中有,這個解析過程就將結束。瀏覽器緩存是受這個域名的失效時間和緩存的空間大小控制的。負載均衡
2.若是用戶的瀏覽器緩存中沒有,瀏覽器會查找操做系統緩存中即爲本地的Host文件。分佈式
3.若是本地Host文件中沒有那麼操做系統會把這個域名發送給這裏設置的LocalDNS,也就是本地區的域名服務器。這個DNS一般都提供給你本地互聯網接入的一個DNS解析服務。這個專門的域名解析服務器性能都會很好,它們通常都會緩存域名解析結果,固然緩存時間是受域名的失效時間控制的,通常緩存空間不是影響域名失效的主要因素。大約90%的域名解析都到這裏就已經完成了,因此LDNS主要承擔了域名的解析工做。oop
4.若是LDNS仍然沒有命中,就直接到Root Server域名服務器請求解析
5.根域名服務器返回給本地域名服務器一個所查詢的域的主域名服務器(gTLD Server)地址。gTLD是國際頂級域名服務器,如.com,.cn、.org等。全球只有13臺左右。
6.本地域名服務器(Local DNS Server)再向上一步返回的gTLD服務器發送請求。
7.接受請求的gTLD服務器查找並返回此域名對應的Name Server域名服務器的地址,這個Name Server一般就是你註冊的域名服務器,例如你在某個域名服務提供商申請的域名,那麼這個域名解析任務就由這個域名提供商的服務器來完成
8.Name Server域名服務器會查詢存儲的域名和IP的映射關係表,正常狀況下都根據域名獲得目標IP記錄,連同一個TTL值返回給DNS Server域名服務器。
9.返回該域名對應的IP和TTL值,Local DNS Server會緩存這個域名和IP的對應關係,緩存的時間由TTL值控制。
10.把解析的結果返回給用戶,用戶根據TTL值緩存在本地系統緩存中,域名解析過程結束。
以上的流程能夠簡化爲下圖
CDN,全稱Content Delivery Network,根本的做用是將網站的內容發佈到最接近用戶的網絡「邊緣」,使用戶能夠就近取得所需的內容,提升用戶訪問網站的響應速度。他-有別於鏡像,它比鏡像更智能,能夠這樣作一個比喻:CDN=鏡像(Mirror) + 緩存(cache) + 總體負載均衡(GSLB),於是,CDN能夠明顯提升Internet中信息流動的效率。目前CDN都以緩存網站中的靜態數據爲主,如CSS、JS、圖片和靜態網頁等數據。用戶在從主站服務器請求到動態內容後再從CDN上下載這些靜態數據,從而加速網頁數據內容的下載速度,如淘寶有90%以上的數據都是由CDN來提供的。這裏引用一個網上比較形象的例子:A家的網速 100M的,但他只用了10M的速度,B家的網速是10M的,可是他須要15M的速度才行。怎麼辦呢。 C是一家CDN服務商,在A家有個節點(就像A是一個贊助商同樣)B在C家買了CDN加速服務。當B的速度不夠的時候,CDN加速就會選擇有節餘的節點來幫B,提升B的速度。這樣B的速度就能達到或超過15M ,皆大歡喜。A沒浪費,B速度有了,C賺了錢。 當C的節點在全國都有,很是多的時候。那麼你用C家的CDN加速服務,你就會大步流星了。
一個用戶訪問某個靜態文件(如CSS),這個靜態文件的域名假如是www.baidu.com,而這個域名最終會被指向CDN全局中CDN負載均衡服務器,再由這個負載均衡服務器來最終分配是哪一個地方的訪問用戶,返回給離這個訪問用戶最近的CDN節點。以後用戶就直接去這個CDN節點訪問這個靜態文件了,若是這個節點中請求的文件不存在,就會再回到源站去獲取這個文件,而後再返回給用戶。
負載均衡就是對工做任務進行平衡、分攤到多個操做單元上執行,如圖片服務器、應用服務器等,共同完成工做任務。它能夠提升服務器響應速度及利用效率,避免軟件或者硬件模塊出現單點失效,解決網絡擁塞問題,實現地理位置無關性,爲用戶提供較一致的訪問質量。
CDN總體的工做流程能夠大概歸爲下圖:
以上就是Http請求的一些理解,若是有不對的地方及時與我來溝通。