从URL输入到页面展现发生了什么?

第一步:在浏览器输入URL

1. URL是什么?

  • URL(Uniform Resource Locator):统一资源定位符
  • URL用于定位互联网上的资源(例如寻找互联网上的一张图片)
  • URL对应一些信息:协议,端口号,域名等其他相关信息

2. 常见的协议:

  • http协议:用于找到网络上的某个资源
  • file协议:用于定位本地电脑上的文件
  • https协议:经过加密后的,安全的http协议
  • //:没有明确写明协议,表示与当前页面的协议保持一致

第二步:域名解析

当我们从浏览器中输入URL后,例如https://jirengu.com,浏览器并不能理解jirengu.com实际上代表什么意思,浏览器需要查找jirengu.com这个网站所在服务器的IP地址才能够定位资源。

1. 域名是什么?

对于https://jirengu.com:8080/blog来说,jirengu.com就是域名(端口若不是80则不能省略)。
对于http://music.baidu.com/来说,baidu.com就是域名。

2. IP地址是什么?

每个处于互联网中的设备都有IP地址(形如192.168.0.1),没有IP地址别人就无法找到这个设备,这个设备也就无法联网。127.0.0.1代表本机IP地址。

3. 局域网IP和公网IP有什么区别?

举例:路由器有一个局域网IP(内网IP)和一个公网IP,公网IP是宽带服务商提供给我们的。局域网IP地址是路由器分配的。当我们的手机和电脑同时接入路由器时,手机和电脑的公网IP是相同的,而局域网IP是不同的。此时我的手机可以通过局域网IP来访问电脑上的资源。

4. 为什么要使用域名而不使用IP地址?

域名有语义化的作用,它比IP地址更容易记忆。

5. 域名解析的具体流程是怎样的?

(1) 浏览器缓存
假如我们在浏览器输入jirengu.com,如果我们曾经访问过jirengu.com,找到过它的ip地址,浏览器就会将这个ip地址缓存一段时间,那当我们再去访问的时候,浏览器就知道jirengu.com的ip地址然后直接去访问这个ip地址。
(2) 系统缓存
当我们第一次访问某个网站时,浏览器中是没有关于这个网站的ip地址的记录的,此时浏览器会去查找系统缓存。浏览器会查找电脑上的hosts文件中是否有该域名和对于的IP。
(3) 路由器缓存
如果系统缓存中没有,则会去路由器缓存中查找是否有相关记录。(一般来说路由器会缓存域名信息)。
(4) ISP DNS缓存
如果路由器缓存中没有相关的记录,则会到互联网服务提供商(例如电信)的DNS中查找。
(5) 根域名服务器
倘若ISP DNS缓存中没有相关记录,则会到根域名服务器查找对应IP,根域名服务器把请求转发给下一级,直到找到对应的IP为止。
问题 1:为什么修改DNS为114.114.114.114或8.8.8.8可以解决电脑上不了网的问题?
8.8.8.8是谷歌提供的DNS服务器的IP地址,114.114.114.114是电信的。如果我们打不开一个网址,说明我们上述五个环节中可能在某处出了问题,这个网址所对应的的IP被无法找到,那么我更改DNS为8.8.8.8,略过上述某些环节,直接从谷歌提供的DNS服务器中查找相关的IP记录。
问题 2:什么是DNS挟持?
举例:我的电脑的hosts文件被篡改了,导致某个域名解析到了不正确的IP地址,那么在域名解析的过程中如果在系统缓存中找到了域名和对应错误IP的记录,则会访问错误的IP地址。

第三步:服务器处理

域名解析成功,访问正确的IP地址,此时进入服务器处理阶段。

1. 服务器是什么?

服务器是一台一台安装了系统的电脑。常见的系统有Linux,Windows Server 2012。

2. 服务器如何处理请求?

  • 由服务器上安装的处理请求的应用(Web server)来处理
  • 常见的Web服务器有:Apache、Nginx、IIS、Lighttpd
  • Web服务器接收用户的Requset交给网站代码或反向代理到其他服务器

第四步:网站处理流程

MVC(Model View Controller)设计模式,模型-视图-控制器的缩写。

  • Model:给控制器提供了数据操作的接口
  • View:显示
  • Controller:统一管理

第五步:浏览器处理

浏览器接收到经过网站处理流程后得到的HTML字符串,对这些字符串进行一句句的读取解析。

  • 解析到 link 标签后重新发送请求获取css
  • 解析到 script 标签后重新发送请求获取js,并执行代码
  • 解析到 img 标签后重新发送请求获取图片资源

第六步:绘制网页

浏览器根据 HTML 和 CSS 计算得到渲染树,绘制到屏幕上,JS会被执行,页面展现。

你可能感兴趣的:(从URL输入到页面展现发生了什么?)