流程
总体来说分为以下几个过程
- NDS解析:将域名解析为IP地址
- TCP连接:TCP三次握手
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染画面
- 断开链接:TCP四次挥手
什么是URL
URL就是我命平时俗称的网址,遵循下面的语法规则
scheme://host.domain:port/path/filename
各部分解释如下
- scheme - 定义因特网的服务类型。常见的协议有http、https、ftp、file
- host - 定义域主机(默认www)
- domain - 域名,比如baidu.com.cn
- port - 端口号(默认为80端口)
- path - 服务器上的路由
- filename - 定义文档/资源的名称
一、域名解析(DNS)
DNS协议运行在UDP协议之上,使用端口号53,在浏览器输入网址后,首先要进行域名解析,将类似于baidu.com转换为对应的域名类似于
104.193.88.123
至于为什么不一开始就赋予一个IP地址,还能省去解析的麻烦,是因为我们更习惯通过单词或字母而非数字来记忆网站,而计算机更擅长处理数字,所以DNS应运而生
浏览器如何通过域名去查询URL中的IP呢
- 浏览器缓存:浏览器会按照一定的频率缓存DNS记录
- 操作系统缓存:如果浏览器找不到,就去操作系统找==(个人理解是去找操作系统中的hosts文件)==
- 路由缓存:路由器也有DNS缓存
- ISP的DNS服务器:ISP是互联网服务提供商的建成,ISP有专门的DNS服务器对应DNS请求
- 如果都找不到,他就会想跟服务器发出请求,进行递归查询(先访问根域名服务器.com域名服务器的IP地址,然后再访问.baidu域名服务器,以此类推)
二、TCP三次握手
三、发送HTTP请求
三次握手结束后,开始发送HTTP报文请求
请求报文由请求行、请求头、请求体三个部分组成
- 请求行:包含请求方阿福、URL、协议版本
- 请求方法包含八种:GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE
- URL
- 协议版本,既HTTP版本号
- 请求头:包含请求的附加信息,由关键 字/值 对组成每行一对,由英文的:隔开
- 请求体:可以承载多个请求参数的数据,但是并不是所有请求都具有请求数据
四、服务器处理请求并返回HTTP报文
1.服务器
对于不同用户发送的请求,会结合配置文件,把不同的请求委托给服务器上处理相应请求的程序处理,然后返回后台程序处理产生的效果作为响应
2.MVC后台处理阶段
MVC将程序分为三个核心组建:模型(MODEL)–视图(view)–控制器(controller)
视图
给用户提供操作界面,是程序的外壳
模型
主要负责数据的交互
控制器
负责根须用户从视图层传入的指令,选取模型层中的数据,然后进行相应的操作,呈现最终结果
3.HTTP响应报文
响应报文由响应行、响应头部、响应主体三个部分组成
- 响应行包含:协议版本,状态码,状态码描述
状态码规则可以看这篇文章 - 响应头部包含响应报文的附加信息,由 名/值 对自称
- 响应主体包含回车符、换行符和响应返回数据,不是所有响应报文都有相应数据
五、浏览器解析渲染画面
分为五个步骤
- 根据 HTML 解析出 DOM 树
- 根据 CSS 解析生成 CSS 规则树
- 结合 DOM 树和 CSS 规则树,生成渲染树
- 根据渲染树计算每一个节点的信息
- 根据计算好的信息绘制页面