# 第一步. 在瀏覽器輸入U(xiǎn)RL
### URL是什么
> - URL: 統(tǒng)一資源定位符咨油,用于定位互聯(lián)網(wǎng)上的資源
> - http、https色解、ftp、file 協(xié)議
```
http://jirengu.com/blog
file:///Users/hunger/workspace/a.html
https://10.245.23.456:3000/users
//jirengu.com/static/imgs/a.png
## 第二步. 域名解析
對(duì)于 `http://jirengu.com`的URL按价,瀏覽器實(shí)際上不知道 `jirengu.com`到底是什么東西,需要查找`jirengu.com`網(wǎng)站所在服務(wù)器的IP地址笙瑟,才能找到目標(biāo)
> 1. 為什么要發(fā)明域名楼镐,不直接用IP?
### 域名是什么
對(duì)于`http://jirengu.com:8080/blog` , `jirengu.com`就是域名
### IP地址是什么
- 每個(gè)處于互聯(lián)網(wǎng)中的設(shè)備都有IP 地址,形如 `192.168.0.1`
- 局域網(wǎng) IP 和公網(wǎng) IP 是有差別的
- `127.0.0.1`代表本機(jī)的 IP
### 域名解析的流程
1. 瀏覽器緩存 – 瀏覽器會(huì)緩存DNS記錄一段時(shí)間
2. 系統(tǒng)緩存 - 從 Hosts 文件查找是否有該域名和對(duì)應(yīng) IP往枷。
3. 路由器緩存 – 一般路由器也會(huì)緩存域名信息框产。
4. ISP DNS 緩存 – 比如到電信的 DNS 上查找緩存。
5. 如果都沒(méi)有找到错洁,則向根域名服務(wù)器查找域名對(duì)應(yīng) IP秉宿,根域名服務(wù)器把請(qǐng)求轉(zhuǎn)發(fā)到下一級(jí),知道找到 IP
> 1. 電腦上不了網(wǎng)墓臭,為什么修改dns為8.8.8.8 或者114.114.114.114?
> 2. dns 劫持是什么蘸鲸?
## 第三步. 服務(wù)器處理
服務(wù)器是一臺(tái)安裝系統(tǒng)的機(jī)器,常見(jiàn)的系統(tǒng)如Linux窿锉、windows server 2012
系統(tǒng)里安裝的處理請(qǐng)求的應(yīng)用叫 Web server
### Web服務(wù)器
- 常見(jiàn)的 web服務(wù)器有 Apache酌摇、Nginx、IIS嗡载、Lighttpd
- web服務(wù)器接收用戶的Request 交給網(wǎng)站代碼窑多,或者接受請(qǐng)求反向代理到其他 web服務(wù)器
![web服務(wù)器.png](http://7xpvnv.com2.z0.glb.qiniucdn.com/ddc261f1-3495-4225-98e8-6282f6eee422.png)
## 第四步. 網(wǎng)站處理流程
> MVC 模型(model)-視圖(view)-控制器(controller)
![rails_mvc](http://7xpvnv.com2.z0.glb.qiniucdn.com/26373b7e-83c5-41f3-bb33-c614fb8a37fd.png)
1. 瀏覽器向 /users 發(fā)送請(qǐng)求;
2. Rails 的路由把 /users 交給 Users 控制器的 index 動(dòng)作處理洼滚;
3. index 動(dòng)作要求 User 模型讀取所有用戶(User.all)埂息;
4. User 模型從數(shù)據(jù)庫(kù)中讀取所有用戶;
5. User 模型把所有用戶組成的列表返回給控制器遥巴;
6. 控制器把所有用戶賦值給 @users 變量千康,然后傳入 index 視圖;
7. 視圖使用嵌入式 Ruby 把頁(yè)面渲染成 HTML铲掐;
8. 控制器把 HTML 送回瀏覽器
## 瀏覽器處理
- HTML字符串被瀏覽器接受后被一句句讀取解析
- 解析到link 標(biāo)簽后重新發(fā)送請(qǐng)求獲取css
- 解析到 script標(biāo)簽后發(fā)送請(qǐng)求獲取 js拾弃,并執(zhí)行代碼
- 解析到img 標(biāo)簽后發(fā)送請(qǐng)求獲取圖片資源
- 瀏覽器根據(jù) HTML 和 CSS 計(jì)算得到渲染樹(shù),繪制到屏幕上
- js 會(huì)被執(zhí)行