• 从浏览器输入URL到显示页面到底发生了什么?


    首先说明一下,当系统本地缓存了你所请求的资源时,会直接把缓存内容解析并显示,而不会进行以下的一系列行为。

    一、DNS域名解析

      至今的计算机数量可谓是数不胜数,而它们的唯一识别身份就是ip地址。我们常说的域名,它的作用就是方便用户去访问主机,毕竟十进制的ip地址不是那么容易记。

      为什么机器在在处理ip数据报时要使用的是ip地址而不是域名?这是因为ip地址的长度固定是32位(IPv4情况下,定长),而域名的长度不是固定的。机器处理起来比较困难。

    二、建立TCP连接(三次握手)

      客户端首先要与服务端建立三次握手,目的是为了同步连接双方的序列号并交换TCP窗口大小信息

      (1)第一次握手

        客户端发送一个TCP的SYN标志位置1的包,指明客户打算连接的服务器的端口,以及初始化序号,保存在包头的序列号字段里

      (2)第二次握手
        服务器发挥确认包应答,即SYN标志位和ACK标志均为1,同时将确认序号设置为客户的ISN加1,即X+1

      (3)第三次握手
         客户端再次发送确认包,SYN标识为0,ACK标识为1,并且把服务器发来的序号字段+1,放在确定字段中发送给对方,并且在数据字段写入ISN的+1

    三、发送HTTP请求

       与服务器建立连接后,就可以向服务器发起请求了。通过请求头、请求正文、请求方法向服务器传递了一个数据块。

    四、服务器处理请求

       服务器收到请求后由web服务器(Apache,Nginx)处理请求,web服务器解析用户请求,知道了需要调用那些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库等,然后将结果通过web服务器返回给浏览器

    五、服务器返回响应

       服务器处理完请求后会往客户端返回一个HTTP状态码,常见的有以下5种:

       (1)1XX 信息性状态码 接收的请求正在处理
       (2)2XX 成功状态码 请求正常处理完毕
       (3)3XX 重定向状态码 需要附加操作以完成请求
       (4)4XX 客户端错误状态码 服务器也无法处理的请求
       (5)5XX 服务器错误状态码 服务器请求处理出错

    六、关闭TCP连接(四次挥手)

      为了避免服务器与客户端双方资源占用和消耗,当双方没有请求或者响应传递时,任意一方都可以发起关闭请求,与创建TCP连接的三次握手类似,关闭TCP连接时需要客户端和服务端总共发送4个包以确认连接的断开

      (1)第一次挥手:
        客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。

      (2)第二次挥手:
        服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态。

      (3)第三次挥手:
        服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态。

      (4)第四次挥手:
        客户端收到FIN后,然后进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

    七、浏览器渲染解析页面

      最后

      (1)解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树

      (2)解析 CSS 会产生 CSS 规则树

      (3)然后Javascript脚本,通过DOM API 和 CSS API 来操作dom Tree 和 rule Tree

  • 相关阅读:
    (iOS)项目总结-项目中遇到的各种的问题和解决方法
    iOS ---不一样的NSLog打印(精准打印)
    iOS 之 Cocoapods安装
    iOS--关于同步下载
    iOS--NSTimer设置定时器的两种方法
    iOS--创建炫酷的渐变色界面
    Mac OS安装 OpenCV(python3)
    使用ADB无线连接Android真机进行调试
    Hexo 添加 SEO
    如何得体跳槽
  • 原文地址:https://www.cnblogs.com/legendheng/p/8921305.html
Copyright © 2020-2023  润新知