点上面关注免费学习前端知识!


前言


登录网站,是我们每个人每天都会做的事。从打开浏览器,在地址输入框输入URL,按下enter键回车,网站页面就展示在我们面前。而这背后发生了什么,让这个页面得以展现在我们面前,是今天这篇文章想要说明的。

一、URL是什么

URL(Uniform Resource Locator),统一资源定位符,实际就是网站网址,又称域名。在茫茫网络世界中,浏览器就是靠URL来查找资源位置。URL包含协议部分,是浏览器和www万维网之间的沟通方式,它会告诉浏览器正确在网路上找到资源位置。常见的协议有http、https、ftp、file、telnet等。其中http是最常见的网络传输协议,而https则是进行加密的网络传输。

       IP的意义

为了便于记忆或辨识,人们使用域名来登录网站,每个域名背后有对应的IP地址。每个网站就是靠IP来定位的。IP是因特网中的每台连接到网络的计算机为实现相互通信而遵循的规则协议。IP分为局域网IP和全网IP。办公中常用的飞秋工具,就是使用办公室局域网IP进行通信的典型表现。每台计算机的本机IP都是127.0.0.1(即localhost)。浏览器并不能识别URL是什么,因此从输入URL开始,浏览器就要做域名解析,也就是IP寻址的工作。

二、IP寻址过程简述

       这里先说明DNS概念

DNS(Domain Name System,域名系统)——记录域名和IP地址相互映射的信息,人们可以免于记住IP数串。全国DNS信息可在网上查找到,各省都有对应分配不同的IP网段。大型企业会有自己的DNS服务器,专门存储域名和IP的映射关系,例如为大多数人熟知的谷歌DNS服务器,地址8.8.8.8。

DNS解析是浏览器的实际寻址方式。IP寻址过程复杂,涉及多层设备和概念知识。在此,我只简单记录两种使用情况下的DNS解析方式,以作了解。

情况1:对于浏览器首次登陆或者相隔一段时间内登陆某个网站

(1)输入URL地址后,浏览器会从电脑C盘的hosts文件查找是否有存储DNS信息,查找是否有目标域名和对应的IP地址;

(2)从路由器的缓存DNS信息中查找;

(3)ISP DNS缓存查找,从网络服务商(比如电信)的DNS缓存信息中查找;

(4)经由以上三种查找方法还没查找到目标URL对应的IP的话,就会向根域名DNS服务器查找目标URL的对应IP,根域名服务器会向下级服务器转送请求,层层下发,直至找到对应IP为止。

情况2:对于近期内有在浏览器登录过的网站,本地浏览器会有DNS缓存,可以直接查找到IP地址。

经过以上IP寻址的过程,目标URL查找到对应的IP地址之后,通过IP地址查找到对应的服务器,浏览器将用户发起的http请求发送给服务器。下一步就到了服务器处理阶段的工作。

三、服务器处理用户请求

每台服务器上都会安装处理请求的应用——web server。常见的web server产品有apache、nginx、IIS或Lighttpd等。

web server 担任管控的角色,对于不同用户发送的请求,会结合配置文件,把不同请求委托给服务器上处理对应请求的程序进行处理(例如CGI脚本,JSP脚本,servlets,ASP脚本,服务器端JavaScript,或者一些其它的服务器端技术等),然后返回后台程序处理产生的结果作为响应。

服务器上程序处理用户请求的这部分,就是下一步要讲的网站处理阶段的工作。

四、网站处理阶段

网站处理,就是实际后台处理的工作。后台开发现在有很多框架,但大部分都还是按照MVC设计模式进行搭建的。

MVC是一个设计模式,将应用程序分成三个核心部件:模型(model)-- 视图(view)--控制器(controller),它们各自处理自己的任务,实现输入、

处理和输出的分离。

      1、视图(view)

视图是用户看到并与之交互的界面。这是前端工作的主力部分。

       2、模型(model)

模型是将实际开发中的业务规则和所涉及的数据格式模型化,应用于模型的代码只需写一次就可以被多个视图重用。在MVC的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据。

       3、控制器(controller)

控制器接受用户的输入并调用模型和视图去完成用户的需求。Controller处于管理角色,从视图接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示模型处理返回的数据。

总结而言,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回html字符串给浏览器,浏览器呈现网页给用户。因此,下一步就来到浏览器处理阶段。

五、浏览器处理

通过后台处理返回的html字符串结果会被浏览器读取解析,对应就是html页面加载、解析、渲染的工作。

       1、加载

浏览器对一个html页面的加载顺序是从上而下的,并在加载过程并行进行解析渲染处理。在这个过程中遇到link标签、image标签、script标签时,浏览器会再次向服务器发送请求获取css文件、图片资源、js文件,并执行js代码,同步进行加载解析。

        2、解析、渲染

解析的过程,其实就是生成解析树,即dom树。dom树是由dom元素及属性节点组成,加上css解析的样式对象和js解析后的动作实现。而渲染,就是将DOM树进行可视化表示。下一步就来到了绘制网页的工作阶段。

六、绘制网页

浏览器通过上面步骤计算得到渲染树,是DOM树的可视化表示,构建渲染树使页面以正确的顺序绘制出来,遵循一定的渲染规则,经过一系列的渲染工作,实现网站页面的绘制,由此最终完成了页面展示。

作者:huangyh_max
链接:http://www.jianshu.com/p/58e4597f9c7d
來源:简书

看前端技术文章,就在Web前端精髓

说说从URL输入到页面展现的过程相关推荐

  1. 从URL输入到页面展现,过程中发生了什么?

    从在地址栏中输入了URL,到浏览器展现出页面整个过程中,大概经历了如下过程: 在浏览器地址中输入了URL并回车 域名解析 服务器处理请求 浏览器处理 网页的绘制 一.在浏览器地址中输入URL 首先解释 ...

  2. 面试必考-从URL输入到页面展现到底发生了什么

    作者:浪里行舟 链接:https://github.com/ljianshu/Blog/issues/24 前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先 ...

  3. 浏览器工作原理:从 URL 输入到页面展现到底发生了什么?

    转载自简书:https://www.jianshu.com/p/d616d887953a,仅做记录分享,侵删 对浏览器原理有过了解的一定不会陌生这篇神文<How Browsers Work> ...

  4. 输入一个url到显示页面经过哪些过程

    输入一个url到显示页面经过哪些过程. 域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 -- ...

  5. URL输入到页面加载解析发生了什么?

    最近在进行前端面试方面的一些准备,看了网上许多相关的文章,发现有一个问题始终绕不开: 在浏览器中输入URL到整个页面显示在用户面前时这个过程中到底发生了什么.仔细思考这个问题,发现确实很深,这个过程涉 ...

  6. 面试官:“说一下从 url 输入到返回请求的过程”

    最近这几年,云计算的普及和 HTML5 技术的快速发展,越来越多的应用转向了浏览器 / 服务器(B/S)架构,这种改变让浏览器的重要性与日俱增,视频.音频.游戏几大核心场景也都在逐渐往 Web 使用场 ...

  7. 阿里面试:“说一下从 url 输入到返回请求的过程”

    作者 | 孟祥_成都 来源 | https://juejin.cn/post/6928677404332425223 前言 年前准备换工作,总结了一波面试最频繁的面试问题跟大家交流.此文章是关于浏览器 ...

  8. 阿里二面: 说一下从url输入到返回请求的过程

    点击关注公众号,实用技术文章及时了解 来源:juejin.cn/post/6928677404332425223 前言 年前准备换工作,总结了一波面试最频繁的面试问题跟大家交流.此文章是关于浏览器的常 ...

  9. 阿里面试官的 说一下从url输入到返回请求的过程 问的难度就是不一样!

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 来源:juejin.cn/p ...

最新文章

  1. linux发现很多pif和exe文件,u盘里 木马xftiaj.pif 是什么文件,肿么删除?
  2. 开源工具高效分析Java应用
  3. s3c6410 开发板Linux系统支持 K9GAG08U0E的方法
  4. Python Matplotlib 画图显示中文
  5. python将json转换为excel_使用python将Excel转换为JSON_python_酷徒编程知识库
  6. shell 命令自动识别系统升级内核、系统索引更新
  7. 怎么结束linux里的redis进程,linux 怎么结束redis的monitor命令
  8. sqlserver 列出表字段和字段说明
  9. 多个需要验证的输入框思路问题
  10. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)
  11. linux中文乱码解决方案
  12. android 发布版本证书,Android Studio 获取发布版和测试版证书SHA1的两种方式
  13. Objective C TCP 通讯实例
  14. 人脸识别php程序,教你用PHP实现微信小程序人脸识别刷脸登录功能
  15. 王者荣耀android换ios,王者荣耀安卓转ios教程攻略
  16. 【朝花夕拾】Android自定义View篇之(十)移动阈值TouchSlop及滑动追踪VelocityTracker...
  17. 便携式禁毒采样器的基础功能
  18. python 机器学习(引言-莺尾花分类)
  19. Python入门数学类编程-----基础数学运算
  20. js获取当前服务器的ip

热门文章

  1. 滴滴技术总监受贿 1000 万,列入招聘黑名单,互联网大厂反腐有多强?
  2. 华为发布政企战略及华为云Stack,瞄准新基建下政企的数字化转型
  3. 收藏!Java 500 道核心面试题全解析
  4. 漫画:如何优化 “字符串匹配算法”?
  5. 双11猫晚直播:看阿里文娱如何“擒住”高并发、多视角、低卡顿!
  6. 物联网终端五年后将超 270 亿!破竹之势下程序员如何修炼内功?
  7. 从科技到“科技亲”,2019 IBM 中国论坛干货分享
  8. 程序员编码能力差,竟是睡眠不足惹的祸?!
  9. 如何搞定知乎模拟登陆的加密难题?
  10. 是时候让 JavaScript 面向对象了!