用戶訪問網站原理及流程

用戶訪問網站原理及流程

描述從瀏覽器打開http://www.baidu.com地址回車發送請求到看到頁面的過程
打開瀏覽器輸入網址回車,到看到頁面的過程
大綱:
1、用戶訪問網站流程框架
2、DNS解析原理 *****

當我們打開瀏覽器輸入網址回車,到看到網頁頁面,主要有兩大步驟:

第一,將域名解析成ip的過程;

第二,通過ip找到網站服務器,請求打開具體的網頁,服務器響應請求,客戶端瀏覽器收到響應報文後,渲染html文檔,最終得到我們看到的網頁頁面。
首先:說一下dns解析的流程,大家都知道,計算機之間只能通過ip相互通信,因爲ip不好記,於是才使用dns服務器把域名解析爲相應的ip,這裏以解析www.oldboyedu.com爲例,當我們輸入這個網址回車的時候,瀏覽器會首先查詢瀏覽器的緩存,這個緩存存活時間可能只有1分鐘,如果沒找到,則去查詢本地的dns緩存和hosts文件,如果有www.oldboyedu.com這個域名對應的ip,則直接通過這個ip訪問網站服務器。如果本地的dns緩存和hosts文件沒找到,這時候就會把請求發送給,網卡配置信息裏的dns服務器,默認有兩個,只有當dns1不能訪問時,纔會使用dns2。我們也稱網卡配置信息裏的dns爲local dns,這時候local dns會先查詢它的緩存,有沒有www.oldboyedu.com相應的記錄,如果有,則返回給用戶,如果沒有,就會訪問根域名服務器,世界一共有13臺根域名服務器,根域名服務器一看,是找.com的,於是會把.com的頂級域名服務器的ip發送給local dns,這時local dns再次訪問.com的頂級域名服務器,.com的頂級域名服務器一看,是找一級域名oldboyedu.com的,於是再將oldboyedu.com的ip發送給local dns,然後繼續往下找,直到找到www.oldboyedu.com的權威dns的A記錄或者cname,這時候local dns會把找到的www.oldboyedu.com的ip發送給客戶端,並記錄在緩存中,這樣的話,下次如果有其他的用戶訪問www.oldboyedu.com這個域名時,local dns的緩存中就有記錄了。客戶端收到local dns發送過來的ip就會通過ip去訪問服務器,並將這個ip記錄在dns緩存中。
以上就是dns解析的原理。

3、tcp/ip三次握手原理 *****

通過dns解析之後,拿到了ip,就可以通過ip向服務器發送http請求了,因爲http是工作在第七層應用層,tcp是工作在第四層傳輸層,所以發生http請求之前,還會進行tcp的三次握手。
tcp的三次握手是:客戶端首先向服務器發送一個帶有SYN標識和一個seq的隨機數,服務端收到後,需要給客戶端迴應一個ack,ack的值就是剛纔的seq隨機數的值+1,在迴應包裏,還包含一個SYN的標識和一個seq隨機數。客戶端收到服務端發過來的迴應包之後,再給服務端發送一個ack,ack的值就是剛纔服務端發過來的seq的值+1。上面三步完成之後,三次握手就完成了,下面就可以開始傳數據了

4、http協議原理(www服務的請求過程)請求報文細節!

http的請求報文,主要包括,請求行,請求頭部,空行,請求主體
而請求行又包括,請求方法,url,協議版本,請求方法主要有GET、HEAD、POST、PUT、DELETE、MOVE,url就是統一資源定位符,通過這個能在服務器上找到唯一的網頁資源,協議版本,目前主流的是http1.1,開始流行的協議版本是http1.0,相對應http1.0,http1.1主要從可擴展性、緩存處理、帶寬優化、持久連接、host頭、錯誤通知、消息傳遞、內容協商等多方面做了一些優化,以上是請求行的內容
再來說一些,請求頭部,請求頭部主要有媒體類型,語言類型、支持壓縮、客戶端類型、主機名等,媒體類型主要有文本文件,圖片文件,視頻文件等,語言類型就是告訴服務器客戶端的接受的語言,支持壓縮的話,可以節省帶寬,客戶端類型,會顯示客戶端瀏覽器的版本信息,操作系統信息等
空行,代表請求頭部的結束,也代表着請求主體的開始
請求報文主體,只有使用POST提交表單的時候,纔有
對應的,服務器收到請求報文之後,就會給出響應報文
響應報文主要包含起始行、響應頭部、空行、響應報文主體
起始行一般包含http版本號,數字狀態碼,狀態情況
而數字狀態碼,常見有以下幾種
200 代表ok
301 永久跳轉

302 臨時跳轉
403 沒權限
404 沒有這個文件
500 未知的錯誤
502 網關錯誤
503 服務器超載,停機維護
504 網關超時
響應頭部,主要包括,服務器的web軟件版本,服務器時間,長連接還是短連接,設置字符集等等
這裏的空行和請求報文空行一樣
在報文主體中包裝載了要返回給客戶端的數據

5、大規模網站集羣架構細節。

常見的網頁資源有三種,分別是靜態網頁,動態網頁,僞靜態
靜態網頁就是沒有後臺數據庫,不含php,jsp,asp等程序,不可交互的,開發者編寫的是啥,顯示的就是啥,不會有任何改變
動態網頁,有後臺數據庫,支持更多的功能,如用戶註冊,登錄,發帖,訂單,博客等,動態網頁並不獨立存在於服務器上的網頁文件,而是當用戶請求服務器上的動態程序時,服務器解析這些程序,並調用數據庫來返回一個完整的網頁內容,它跟靜態網頁的url不同,它的url中包含?、&等特殊符號,搜索引擎收錄的時候存在一定的問題。動態網頁爲了方便收錄,常常會利用rewrite技術,把動態網頁的URL僞裝成靜態網頁URL,這就是僞靜態。
不同的網頁資源,打開的流程不一樣,下面假設我們訪問的是一個靜態網站:
客戶端會通過http協議,下載服務器上的html文件,然後去讀這個html文件,根據html頁面中的鏈接,自上而下的請求,每一個請求是一個鏈接,如果是圖片的話,會下載邊渲染,遇到js,就會加載js,當js比較內容較複雜時,瀏覽器就會等待,鼠標在轉圈,我們稱這個爲js阻塞,當js下載完畢並執行完成之後,纔會顯示我們看到的網頁。
當我們訪問的是一個動態網頁時,首先用戶發出一個請求,服務器收到這個請求之後,這裏假設服務器使用的是nginx,nginx會把這個請求轉給php,php就會去查詢數據庫,根據數據庫返回的值,生成一個完整的網頁內容,發送給用戶,用戶收到之後,也是邊下載邊渲染,加載js,執行完畢之後,纔會顯示我們看到的網頁
當服務器的訪問量達到億級PV時,這個訪問的過程就更復雜了,用戶的請求會先訪問全國的CDN節點,通過CDN擋住全國80%的請求,當CDN上沒有時,在訪問服務器集羣,這個集羣一般都有一個4層的代理,這個4層的代理,使用軟件來完成的話,就是LVS,使用硬件就是F5,4層的代理,後面纔是7層的負載均衡,常用的是haproxy,nginx,然後纔是多臺web服務器,web服務器比較多的時候,就有兩個問題,一個是用戶數據的一致性,不能因爲不同的web服務器提供服務,而導致數據不同步,這時候,我們就需要使用NFS共享存儲,第二個問題是session,不能因爲不同的web服務器提供服務,session找不到了,這時候,我們就需要使用memcached來存放並共享session。由於用戶訪問量太大,這時候的瓶頸就是數據庫的壓力,我們一般都是使用分佈式緩存memcache,redis等,另外數據庫還需要做讀寫分離等優化,後面的過程與訪問動態網頁類似

6、http協議原理(www服務的響應過程)響應報文細節!

跟請求類似
7、tcp/ip四次揮手過程原理 *****

當瀏覽器加載一個完整的頁面時,還需要與服務器斷開連接,這個過程就是tcp的四次揮手
首先客戶端會發送一個帶有FIN標識和一個seq隨機數,服務端收到之後,會迴應一個ack,ack的值等於剛纔的seq的值+1,發送之後,服務器會再發一個包,這個包裏面也帶有FIN標識和一個seq隨機數,客戶端收到之後,迴應一個ack,ack的值等於剛纔的seq值+1,以上完成之後,服務器和客戶端的4次揮手就完成了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章