zoukankan      html  css  js  c++  java
  • 点击浏览器到返回经历了什么(详细解释)

    1.用户输入url,浏览器内部代码将url进行拆分解析

    2.浏览器首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,

    有,则向其IP地址发送请求

    没有,就会将domain(域)发送给 dns(域名服务器)进行解析(解析如下图),

    将域名解析成对应的服务器IP地址,发回给浏览器

    浏览器费了一顿周折终于拿到了服务器IP,接下来就是网络通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层往上走

    首先:应用层客户端发送HTTP请求
    HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。
     
    然后:传输层TCP传输报文
    位于传输层的TCP协议为传输报文提供可靠的字节流服务。它为了方便传输,将大块的数据分割成以报文段为单位的数据包进行管理,
    并为它们编号,方便服务器接收时能准确地还原报文信息。TCP协议通过“三次握手”等方法保证传输的安全可靠。
    客户端发送一个带有SYN标志的数据包给服务端,在一定的延迟时间内等待接收的回复。服务端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后客户端再回传一个带ACK标志的数据包,代表握手结束,连接成功。
     
    SYN (Synchronize Sequence Numbers)同步序列编号
    ACK  (Acknowledgement)确认字符
     
     
    网络层IP协议查询MAC地址
    IP协议的作用是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址。
    IP地址和MAC地址是一一对应的关系,一个网络设备的IP地址可以更换,但是MAC地址一般是固定不变的。
    ARP协议可以将IP地址解析成对应的MAC地址。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC地址来搜索下一个中转目标。
    数据到达数据链路层在找到对方的MAC地址后,就将数据发送到数据链路层传输。
    这时,客户端发送请求的阶段结束
     
    再次:服务器接收数据
    接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程中包括在运输层通过TCP协议将分段的数据包重新组成原来的HTTP请求报文。
    服务器响应请求
    服务接收到客户端发送的HTTP请求后,查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码。状态码由三位数字组成,
     
    200 OK表示请求成功。
    301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应报文也会附带重定向的url,客户端接收到后将http请求的url做相应的改变再重新发送。
    401 没有权限
    403 服务器收到 但是拒绝执行
    404 not found 表示客户端请求的资源找不到。
    500 服务端出现错误
     
    服务器返回相应文件
    服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。
    web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。
     
     
    关闭TCP连接
    为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次挥手。
     
     
     
    4.页面的渲染阶段
    流程:
    1. 解析HTML生成DOM树。
    2. 解析CSS生成CSSOM规则树。
    3. 将DOM树与CSSOM规则树合并在一起生成渲染树。
    4. 遍历渲染树开始布局,计算每个节点的位置大小信息。
    5. 将渲染树每个节点绘制到屏幕。
  • 相关阅读:
    linux常用命令---文件操作
    Django 框架中定时触发脚本
    jquery 中选择当前标签下众多相同子标签中的第n个
    Django + DRF + Elasticsearch 实现搜索功能
    django 使用celery 实现异步任务
    python 通过 pymysql模块 操作 mysql 数据库
    django 自定义中间件 middleware
    django 使用其自带的验证系统 进行用户名有效性验证 登录状态验证 登入操作 登出操作
    python脚本 读取excel格式文件 并进行处理的方法
    python 将json格式的数据写入csv格式的文件中
  • 原文地址:https://www.cnblogs.com/jian-gao/p/10696873.html
Copyright © 2011-2022 走看看