浏览器从url输入到内容展现究竟发生了什么?
第一步:输入网址
这一步需要了解几个概念
URL:统一资源定位符,用于定位互联网上的资源
http:超文本传输协议(Hyper Text Transfer Protocol)
https:安全的http协议(Hypertext Transfer Protocol Secure)由http进行通信,但利用SSL/TLS来加密数据包
ftp:文本传输协议(File Transfer Protocol)
file:用于定位本地计算机的文件
//: 表示和当前页面协议保持一致
第二步:域名解析
这一步需要了解的几个概念
域名:由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称
ip:每一个处于互联网中的设备都有ip地址,通过ip可以找到主机
浏览器并不知道输入的网址对应哪一个服务器,域名解析的作用就是通过域名解析服务器(dns)找到网址对应的ip,然后把ip告诉浏览器,浏览器通过ip找到想要访问的服务器。
域名解析的流程:
1. 先找浏览器缓存(浏览器会缓存dns记录一段时间)
2. 浏览器缓存找不到,找系统缓存(从hosts文件查找是否有该域名对应的ip)
3. 系统缓存里找不到,找路由器缓存(一般路由器也会缓存域名信息)
4. 路由器缓存里找不到,找ISP DNS缓存(比如到电信的DNS上查找缓存)
5. 如果都没有找到,则向根域名服务器查找域名对应的ip,根域名服务器把请求转发到下一级,直到找到ip
第三步:服务器处理
这一步需要了解的几个概念
服务器:一台装有系统的机器,常见的系统如:Linux、windows server2012。
web server:服务器系统里装的处理请求的应用叫web server,常见的web server:Apache、Nginx、IIS、Lighttpd。
web server接受用户的Request,然后交给网站代码,或者接受请求反向代理到其他服务器
第四步:网站处理流程
1. 浏览器向 /users 发送请求;
2. Rails 的路由把 /users 交给 Users 控制器的 index 动作处理;
3. index 动作要求 User 模型读取所有用户(User.all);
4. User 模型从数据库中读取所有用户;
5. User 模型把所有用户组成的列表返回给控制器;
6. 控制器把所有用户赋值给 @users 变量,然后传入 index 视图;
7. 视图使用嵌入式 Ruby,把页面渲染成 HTML;
8. 控制器把 HTML 送回浏览器
第五步:浏览器处理
1. HTML字符串被浏览器接受后被一句句读取解析
2. 解析到 link 标签后重新发送请求获取css
3. 解析到 script 标签后发送请求获取 js,并执行代码
4. 解析到 img 标签后发送请求获取图片资源
5. 浏览器根据HTML和CSS计算得到渲染树,绘制到屏幕上