1. 检查有无缓存,有的话则不请求服务器直接加载
2. DNS查询
通过DNS查询到相应的IP地址(你的路由问电信公司,于是电信公司返回对应的IP地址)
补充说明:
- 你若修改了hosts文件,可自己指定域名的IP,绕过DNS。
- URL和域名是两个概念:例如,xiedaimala.com是这个网站的域名,根据这个域名找到写代码啦的服务器,xiedaimala.com/courses 是URL,根据这个URL定位到写代码啦的课程表。
- IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限;
3. 建立TCP连接(三次握手)
- 客户端对服务器:现在可以连接你吗,把SYN设为1,seq=client_isn发送给服务器。
- 服务器:准备好了,可以连接,把SYN=1,seq=server_isn,ack=client_isn+1,发送给客户端
- 客户端:那我开始连接你了,把SYN=0,seq=client_isn+1,ack=server_isn+1
4. 发送HTTP请求(请求的四部分)
GET /xxx HTTP/1.1
Host: baidu.com
Accept: text/html
POST /xxx HTTP/1.1
Host: baidu.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Content-Length: ...
(断行)
user=123&&pass=123
5. 后台处理请求
- 监听80端口
- 路由
- 渲染HTML模版
- 生成响应
6. 服务器发送HTTP响应
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: ....
(断行)
<!DOCTYPE html>
<html>...</html>
7 ready.state === 4 接收完成
8. 关闭TCP连接(四次握手)
9. 解析HTML
- 查看DOCTYPE,选择html5还是xml
- 逐行阅读html,Chrome会等css加载完后再渲染html,IE会直接渲染html,等css下载完后再渲染一次html
- 下载css,IE可以同时下4个,Chrome可以同时下8个,然后一个一个依次解析css
- js也是同时下载,但依次解析,解析js的时候一定会阻止html的渲染,等js解析完了再渲染html