1>瀏覽器向服務器發送請求報文
http:/www/baidu.com:80/login.aspx
- 第一步:根據這個www/baidu.com的域名來找DNS服務器,解析成對應的IP地址。
- 第二步:瀏覽器解析到IP地址后,對指定的URL進行HTTP封裝,把URL封裝成http報文。
- 第三步:瀏覽器把URL封裝成HTTP報文后,將這個HTTP請求報文發送到服務器。(注:瀏覽器是如何把http請求報文發送到服務器的呢? 答案:瀏覽器會在內部建立一個Socket對象,把http請求報文轉變成byet[]字節,然后調用Socket.Sent()方法把這些數據發送到服務器的)
2>服務器向瀏覽器響應
在服務器端:
- 第一步:服務器獲取到瀏覽器發送過來的HTTP請求報文
(注:服務器是如何獲取到瀏覽器發送過來的HTTP請求報文的呢?答案:服務器也是通過Socket.Receive()方法接收到了瀏覽器發送過來的http請求報文數據) - 第二步:服務器對接收到的http請求報文數據進行處理:
1> 先解析http請求報文
2> 根據解析好的http報文,在服務器端查找用戶請求的資源(如果瀏覽器請求的是靜態資源,則服務器直接通過文件操作讀取這些資源然后把資源通過調用服務器端socket的send()方法直接發送給瀏覽器,如果瀏覽器請求的是動態網頁,則web服務器會調用對于的.NET FreameWork來執行對應的動態網頁中的代碼,執行完畢后生成的HTML代碼再通過調用Socket.Sent()發送給瀏覽器)
3>瀏覽器解析渲染服務器響應的報文(HTML代碼)
瀏覽器端:
瀏覽器通過Socket.Receive()方法收到服務器發送過來的HTML代碼,然后對這些HTML代碼進行渲染。
瀏覽器怎么解析這些HTML代碼呢?答案:瀏覽器接收到服務器發送過來的html代碼,然后瀏覽器會對這些HTML代碼從上到下一句一句的解析。
- 遇到一些標簽,比如<div>,<a> ,<span> ,<p>等標簽,瀏覽器會調用渲染引擎對這些標簽進行渲染,然后把結果顯示到頁面。
-
遇到語義解釋性的標簽嵌入文件(image,JS腳本,CSS樣式)例如:遇到
的時候瀏覽器會首先顯示一個圖片的框(窗口),如果img標簽里設置了寬度和高度,它會立即將這個框(窗口)的大小給固定,如果沒有寬度和高度,就顯示一個小的默認大小的的框(窗口),然后再次通過Socket向服務器發送請求報文,來請求123.png這張圖片,請求到123.png這張圖片后,如果img之前沒有設置過寬度和高度,這個時候才重新渲染它 的高度和寬度,如果img之前已經設置過高度和寬度了,這時候只要把123.png這張圖片填到框里就可以了。
- 遇到 <link href="StyleSheet1.css" rel="stylesheet" />的時候瀏覽器會再次通過Socket向服務器發送請求報文,來請求這個StyleSheet1.css文件
- 遇到<script src="jquery-1.11.2.js"></script>的時候,瀏覽器又會像服務器發送請求報文,來請求這個jquery-1.11.2.js文件