从输入网址到页面呈现

2018-12-01  本文已影响45人  HelloJames

从打开浏览器输入网址, 到页面呈现, 背后发生了什么? 经历了怎样的一个过程? 先给大家来张总体的流程图, 具体步骤请看下文分解.


image.png

从URL输入到页面呈现, 大致分为以下6个步骤:

1. URL是什么?

URL(Uniform Resource Locator),统一资源定位符,用于定位互联网上资源,俗称网址。

比如 http://www.baidu.com/demo/index.html,遵守以下的语法规则:

scheme://host.domain:port/path/filename
各部分解释如下:

2. 域名解析(DNS)

在浏览器输入网址后, 首先要经过域名解析, 因为浏览器并不能直接通过域名找到对应的服务器, 而是要通过IP地址.

IP地址

IP地址是指互联网协议地址, 是IP Address的缩写. IP地址是IP地址协议提供的一种统一的地址格式, 它为互联网上的每个网格和每一台主机分配了一个逻辑地址, 以此来屏蔽物理地址的差异. IP地址是一个32位的二进制数, 比如: 127.0.0.1 为本机IP.

域名的作用就是便于记忆和沟通的一组服务器地址. 用户通常使用主机名或域名来访问对方的计算机, 而不是直接通过IP地址访问. 因为与IP地址的一组纯数字相比, 用字母组合配合数字的表示形式来指定计算机名更符合人类的记忆习惯, 但要让计算机去理解名称, 相对而言就变得困难了. 因为计算机更擅长处理一长串数字. 为了解决上述问题, DNS服务应运而生.

域名解析

DNS协议提供通过域名查找IP地址, 或逆向从IP地址反查域名的服务. DNS是一个网络服务器, 我们的域名解析简单来说就是在DNS上记录一条信息记录.

例如 baidu.com 220.114.23.56(服务器外网IP地址)80(服务器端口号)

浏览器如何通过域名去查询URL对应的IP?

浏览器通过向DNS服务器发送域名, DNS服务器查询到与域名相对应的IP地址, 然后返回给浏览器, 浏览器再将IP地址打在协议上, 同时请求参数也会在协议中搭载, 然后一并发送给对应原服务器.

3. TCP三次握手

在客户端发送数据之前会发起TCP三次握手, 用以同步客户端和服务端的序列号和确认号, 并交换TCP报文信息.

三次握手时序图如下:


image.png

TCP三次握手过程如下:

为什么需要三次握手?

谢希仁著《计算机网络》中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。

4. 发送HTTP请求

TCP三次握手结束后, 开始发送HTTP请求报文

请求报文由请求行(request line), 请求头(request header), 请求体(request body)三大部分组成, 如下图所示:


image.png

请求行(Request Line)

包含请求方法, URL, 协议版本

以上代码中, "POST"代表请求方法, "/demo/index.html"表示URL, "HTTP/1.1"代表协议和协议版本, 现在比较流行的是HTTP 1.1版本.

请求头(Request Header)

包含请求的附加信息, 由关键字/值对组成, 每行一对, 关键字生值由英文冒号":"分隔

请求头部通知服务器有关于客户端请求的信息, 它包含许多有关于客户端环境和请求正文的有用信息. 其中, 比如:

请求体(Request Body)

可以承载多个请求参数的数据, 包含回车符, 换行符和请求数据, 并不是所有请求都有请求数据.

name=tom&password=1234&realName=tomson

上面代码, 承载着name, password, realName三个请求参数.

5. 服务器处理请求并返回HTTP报文

服务器

服务器是网络环境中的高性能计算机,它侦听网络上的其他计算机(客户机)提交的服务请求,并提供相应的服务,比如网页服务、文件下载服务、邮件服务、视频服务。而客户端主要的功能是浏览网页、看视频、听音乐等等,两者截然不同。 每台服务器上都会安装处理请求的应用——web server。常见的 web server 产品有 apache、nginx、IIS 或 Lighttpd 等。

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

MVC后台处理

后台开发现在有很多框架,但大部分都还是按照 MVC 设计模式进行搭建的。

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


image.png

MVC架构

这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。

在这个阶段中, 浏览器发送请求, 先经过控制器,控制器进行逻辑处理和请求分发,接着会调用模型,这一阶段模型会获取 redis db 以及 MySQL(等数据库) 的数据,获取数据后将渲染好的页面,响应信息会以响应报文的形式返回给客户端,最后浏览器通过渲染引擎将网页呈现在用户面前.

HTTP响应报文

响应报文由响应行(request line)、响应头部(header)、响应主体三个部分组成。

image.png

6. 浏览喊叫解析渲染页面

浏览器拿到响应文本 HTML 后,接下来介绍下浏览器渲染机制


image.png

浏览器解析渲染页面大致分为5个步骤:

根据HTML解析DOM树

根据CSS, 解析生成CSS规则树

结合DOM树和CSS规则树, 生成渲染树

根据渲染树计算每一个节点的信息(布局)

根据计算好的信息绘制页面

7. 断开连接

当数据传送完毕, 需要断开TCP连接, 此时发起TCP四次挥手

TCP四次挥手时序图如下:


image.png

本文部分内容摘至网络

上一篇下一篇

猜你喜欢

热点阅读