输入url->页面渲染

246 阅读4分钟

某一天正常上班,突然想到一个问题,我们天天写前端写页面,知道输入地址,enter后就会出现自己写的东西,那中间经历了什么呢?于是各种查资料,此时又想到这个问题,所以整理一下,以备后面自己理解~

当然这个问题涉及到的很多内容,自己也只能说个大概,经不起深问 o(╥﹏╥)o 道友路过求指点~

输入url到页面渲染的具体过程

总体来说分为以下几个过程:

1.DNS解析/转换

2.TCP连接

3.发送HTTP请求

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

5.浏览器解析渲染页面

6.断开链接

DNS解析/转换

当浏览器输入url时,浏览器不能直接通过url找到服务器,而是要根据ip地址,所以需要一个解析或者说转换的过程;

IP地址是ip协议提供的地址格式,每个网络或者说主机都会被分配这样的一个ip地址,但是这个地址是32位的二进制数,不便于记忆,所以出现他的代称也就是url。

输入url的时候,域名系统将url解析成机器可以识别的ip地址;

域名系统就是一个存域名以及ip地址对应关系的数据库;略~

TCP连接

这里就是著名的三次握手,大学我学过的,然而都画内老师了,作为前端,我也只能简单了了解一下;

  • 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)(意思就是说,哥们,我要连接了,你确认下呢?)
  • 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;(我同意连接了已经回复了,你看下呢?)
  • 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.(好的,哥,我已经接收到了) 完成三次握手,客户端与服务器开始传送数据

还有四次挥手?(大概了解了一下)

  • 客户端发送包到服务端说要关闭数据传输
  • 服务端收到包,然后发送确认包给到客户端,服务端等待关闭
  • 服务端发送一个包,用来关闭数据传输
  • 客户端收到后,进入等待阶段,然后发送关闭的包给服务端,服务端关闭数据传送

发送HTTP请求

发送http请求,比较常用的就是get或者post;

请求报文头部信息:

  • Accept 就是告诉服务器端,我接受那些MIME类型

  • Accept-Encoding 这个看起来是接受那些压缩方式的文件

  • Accept-Lanague 告诉服务器能够发送哪些语言

  • Connection 告诉服务器支持keep-alive特性

  • Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端

  • Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多个虚拟主机

  • User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜索引擎的蜘蛛等

这边扩展一下https,为什么说https更安全?

https是在传输过程中加密的,即https=http+加密;

一个比较好的比喻就是:

http: a写信给b,路上可能被邮寄员或者收发室老大爷给看了,并且戳上小广告

https: a和b约定一个暗号,这样子别人拿到就看不懂了;

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

HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文

状态码:

  • 1xx:指示信息–表示请求已接收,继续处理。

  • 2xx:成功–表示请求已被成功接收、理解、接受。

  • 3xx:重定向–要完成请求必须进行更进一步的操作。

  • 4xx:客户端错误–请求有语法错误或请求无法实现。

  • 5xx:服务器端错误–服务器未能实现合法的请求。

被别人问到301和302的区别?

301是表示永久的重定向,302是临时性的冲定向;

浏览器解析渲染页面

ok,终于到了我前端的地盘了;

解析的过程,其实就是生成解析树,即dom树,浏览器解析渲染页面包括三部分(边解析边渲染):

html:构建dom树

css:渲染dom树,牵扯到的是回流和重绘

js:负责dom树的动作;js是单线程,涉及到事件循环(event loop)

断开连接

即上面说的四次挥手~

前端的部分一笔带过,后面还会更,而且我相信很多前端小伙伴也都已经和了解那些知识点了~好了,时隔多年的第一篇完结。