当我们在浏览器输入url到页面加载完成都发生了哪些过程

一.URL解析

URL:统一资源定位符。用于定位和标识互联网上的资源,如页面,图片,视频等。

它由几个部分构成:


        1.协议

        在网络上进行通讯和数据交换的约定和规则,例如http,https,ftp等。

        协议定义了数据的格式,传输方式,错误检测和纠正等方面的规范,以确保不同设备和系统之间能够相互理解和进行有效的通信。

                A.数据格式:      
                        (1)数据类型:例如整数,浮点数,字符串,布尔值等。
                        (2)数据编码:数据从一种表达形式转换为另一种表达形式的方式。例如ASCLL,Unicode,UTF-8.
                        (3)数据结构:规定数据的层次结构,字段的顺序,字段的大小,字段之间的关系。例如:数组,对象,列表,键值对等。
                        (4)数据序列化:数据转换为可传输或存储格式的过程,以及将数据从传输或存储格式还原回原始数据的过程。例如:JSON,XML,Protocol Buffers等。
                        (5)数据校验:确保接受数据的完整性和准确性。例如:校验和,哈希函数,数字签名等机制。
                        (6)数据检测和纠正:规定错误检测和纠正机制,帮助接收方检测和纠正数据传输过程中可能出现的错误。常见的机制包括奇偶校验,循环冗余校验(CRC),向前纠错码等。
                B.传输方式:
                        (1)无连接传输和面向连接传输:每次传送数据时,发送方和接受方都不需要建立持久的连接,每个数据包都是独立传输的。面向连接传输在传送链接前需要建立一个连接,并在数据传输完毕后在释放连接。tcp是面向连接的传输协议,udp是无连接传输协议。
                        (2)单播,广播和组播:单播传输是指将数据从一个发送方传递到一个指定的接收方,广播传输将数据传送给网络中的所有设备,而组播传输则是将数据传送给特定的组或多个指定的接收方。
                        (3)流式传输和报文传输:流式传输是指将数据作为连续的字节流进行传送,而报文传输则是将数据分割为独立的数据块(报文)进行传送。TCP使用流式传输,而UDP通常使用报文传输。
                        (4)可靠传输和不可靠传输:可靠传输确保数据在传送过程中不会丢失,而且会按正确的顺序到达接收方。TCP是一种可靠传输协议,它使用确认和重传机制来确保数据的可靠性。相比之下,不可靠传输不保证数据的可靠性,可能会导致数据丢失或乱序。UDP是一种不可靠传输协议。
                        (5)分段传输和重组传输:在传输较大的数据时,协议可以将数据分段传输,然 后在接收端重新组装这些数据段。这样可以更高效地传送大量数据。
               C.错误检测与纠正:
                        (1)校验和:校验和是一种简单的错误检测机制,它通过计算数据的校验和值,并将其附加到数据中。接收方在接收数据时重新计算校验和,并与发送方发送的校验和进行比较,以检测数据是否在传输过程中发生了错误。
                        (2)循环冗余检测 (CRC):CRC是一种更强大的错误检测技术,它通过在数据中添加冗余位来计算校验值。接收方使用相同的CRC算法来计算接收到的数据的校验值,并与发送方发送的校验值进行比较,以检测错误。
                        (3)前向纠错 (Forward Error Correction, FEC):FEC是一种纠正错误的技术,在发送数据时通过添加冗余信息来提供冗余度,以便接收方可以在一定程度上纠正错误。FEC技术通常使用纠错码,例如海明码或卷积码。
                        (4)重传机制:重传机制用于在发现数据包丢失或损坏时重新发送数据。例如,TCP协议使用确认和重传机制来确保数据的可靠传输。当发送方未收到接收方的确认或检测到数据包丢失时,它会重新发送相应的数据包,以确保数据的完整性。

        2.主机名:由一串字符组成,通常是字母,数字和连字符。可以是一个域名或一个局域网内的设备名称。在网络中标识和定位设备。当我们在浏览器中输入一个网址,浏览器会将主机名解析为一个ip地址,以便准确找到目标设备进行通信。

                1.如何解析主机名?
                 通常在计算机网络中的DNS服务器上进行。
                        DNS解析:

 

                                a.操作系统检查缓存。当在浏览器或其他应用程序输入一个主机名,操作系统首先检查本地缓存书否存储ip,如果有,直接使用,跳过后续解析。
                                b.发送请求。操作系统向DNS服务器发送查询请求,DNS服务器通常由你的网络服务供应商或其他网络设置指定。
                                c.DNS检查缓存,如果有匹配记录,直接返回ip地址。
                                d.如果没有,向更高级DNS服务器发送查询请求,直到找到负责该主机名区域的权威DNS服务器
                                e.权威DNS服务器检查数据记录,找到ip,传回发起查询的DNS服务器。
                                f.将ip传回操作系统,操作系统保存到自己缓存,并传给应用系统,创建连接。
        主机名可以映射一个或多个ip地址,主机名通常与域名相关联,域名是一个层次化的命名系统,用于将主机名和ip地址相对应
               2.什么是域名?
                        域名是由多个部分组成的层次化命名系统,用于将特定名称和相应ip地址相关联。
                        组成成分:
                                a.顶级域:通常表示域名分类或所属的国家/地区。例如:.com表示商业类域名,.org表示非营利组织,.net表示网络服务,.cn表示中国等。每个顶级域由一个顶级名服务器管理。
                                b.二级域:域名的核心部分,通常表示特定的组织,企业,品牌或个人。
                                c.子域:进一步细分和组织网站的不同部分或子分类。
                                d.主机名:指定了具体的服务器或设备名称。

        3.端口号:

        端口号是在网络通信中用于标识特定应用程序或服务的数字标识符。它是一个16位的整数,范围从0-65535。在tcp/ip网络协议中,端口号用于在主机上区分不同的应用程序或服务,以便正确的将网络数据包传送到目标应用程序。

                常见端口号级关联应用程序或服务:
                        20,21:FTP(文件传输协议,用于文件传输)。
                        22:SSH(安全外壳协议)用于远程登录和安全文件传输。
                        25:SMTP(简单邮件传输协议)用于发送电子邮件。
                        80:HTTP(超文本传输协议)用于web浏览器和web浏览器之间的通信。
                        443:HTTPS(安全超文本协议)加密的http。
                        110:POP3(邮局协议版本3)用于接受电子邮件。
                        143:IMAP(互联网消息访问协议)用于接受和管理电子邮件。
                        3306:MySQL
                        3389:远程桌面协议(RDP)用于远程访问计算机桌面。
        当计算机受到网络数据包时,它会查看目标端口号,并将数据包传递给相应的应用程序或服务。
        通过不同端口进行区分,在同一台主机上可以同时运行多个应用程序或服务

        4.路径:

        路径指的是URL中主机名之后的部分,用于定位特定的资源或页面。它描述了资源在服务器上的位置和层次结构。

        5.查询参数:

        位于路径之后的部分,用于向服务器传递额外的数据或参数,以便服务器跟据这些参数处理请求和生成相应的响应,执行特定的操作,如过滤数据,实现分页等。通常以?开头,有多个键值对组成,每个键值对用&分割。

        

                查询参数的格式为 key=value,其中 key 是参数的名称,value 是参数的值。多个查询参数可以同时存在,并按照键值对的方式进行表示。
                        例如,在以下URL中:
          https://www.example.com/search?q=keyword&page=1&limit=10
          https://www.example.com 是URL的协议和主机部分。
          /search 是URL的路径部分。
             q=keyword&page=1&limit=10 是查询参数部分。
                       在这个例子中,查询参数包含了三个键值对:
             q=keyword 表示搜索关键字为 "keyword"。
             page=1 表示请求的页码为 1。
             limit=10 表示每页显示的结果数量限制为 10。

        6.片段标识:

        URL解析中的片段标识(Fragment Identifier)是URL中的一个可选部分,用于指定文档或资源中的特定片段或位置。片段标识位于URL的路径和查询参数之后,由井号(#)开头,后面跟着具体的标识符。
        片段标识通常用于指示文档中的锚点或内部导航目标。它可以让用户直接跳转到特定部分,而无需滚动整个页面。常见的用法包括跳转到特定章节、段落、标题、注释或特定位置。
        片段标识不会被包含在HTTP请求中发送到服务器,而仅在客户端处理和使用。服务器通常不会根据片段标识来处理请求或生成响应

二.发送http请求

服务器通过已建立的连接向服务器发送http请求。请求中包含方法(GET,POST),路径,请求头和其他相关信息。


  1. 请求行:浏览器构建请求行,包括请求方法、URL和HTTP协议版本。常见的请求方法包括:
    • GET:获取指定资源。
    • POST:向服务器提交数据,用于创建新资源或执行操作。
    • PUT:向服务器上传数据,用于替换指定资源。
    • DELETE:删除指定资源。
    • HEAD:获取资源的头部信息,不包含实际内容。
    • OPTIONS:获取服务器支持的请求方法和功能。
  2. 请求头部:浏览器可以添加多个请求头部,用于提供额外的信息。常见的请求头部包括:
    • User-Agent:浏览器的用户代理信息,用于标识浏览器类型和版本。
    • Content-Type:请求体中的数据类型,常用于POST请求。
    • Accept:浏览器可以接受的响应内容类型。
    • Referer:包含当前请求页面的URL,用于标识请求的来源。
    • Cookie:包含与当前域关联的Cookie数据。
    • Authorization:用于身份验证的凭据。
  3. 请求体:对于某些请求方法(如POST),浏览器可以在请求体中发送数据。请求体可以包含表单数据、JSON数据、文件上传等内容。

三.服务器处理请求

        收到http请求的服务器根据请求内容进行处理。


  1. 接收请求:服务器通过网络接收到客户端发送的HTTP请求消息。这通常是通过网络套接字实现的,服务器监听指定的端口并接收传入的请求。 
                套接字是一个软件抽象层,它封装了底层网络协议的细节,并提供了一组编程接口,使得应用程序可以通过网络进行数据传输。套接字可以看作是网络中两个程序之间的通信端点,一个套接字用于发送数据,另一个套接字用于接收数据。
                当服务器程序监听指定的端口时,它会通过网络套接字绑定该端口号,并开始等待该端口上的传入连接请求。这样,当其他计算机上的客户端程序发起连接请求时,请求会被传送到服务器所监听的端口。
      2.解析请求:服务器解析接收到的HTTP请求消息。它会解析请求行、请求头部和请求体,以获取请求的方法、URL、头部信息和请求体内容。
                a.接收请求消息:一旦接收到请求消息,服务器将其保存在内存中以进行解析.
                b.解析请求行:服务器会将请求行分解为方法、URL和协议版本三个部分,以便后续处理。
                c.解析请求头:请求头包含了一系列的键值对,描述了请求的各种属性和要求。服务器会解析并提取请求头中的各个字段,如Host、User-Agent、Content-Type等。
                d.解析请求主体:如果请求消息包含请求主体(如POST请求中的表单数据),服务器会根据请求头中的Content-Length或Transfer-Encoding字段来确定请求主体的长度或编码方式,并进行相应的解析。
                e.处理请求:服务器可能会根据请求的URL路由到不同的处理程序或执行相应的操作,如返回静态文件、调用后端接口等。

        3.路由处理:服务器根据解析得到的URL和请求方法,确定要处理请求的目标资源或执行的操作。这通常涉及到服务器的路由配置,将请求映射到相应的处理程序或控制器。
                a.路由配置:服务器会事先进行路由配置,定义了不同URL路径和请求方法的映射关系,以及相应的处理程序或控制器。这个配置通常在服务器的代码或配置文件中进行设置。
                b.解析URL.
                c.匹配路由规则:服务器将解析得到的URL与路由配置进行匹配,寻找与请求路径和请求方法相匹配的路由规则。路由规则可以是简单的字符串匹配,也可以使用正则表达式或其他灵活的方式进行匹配。
                d.路由处理:一旦找到匹配的路由规则,服务器会执行相应的处理程序或控制器。这可能是调用特定的函数、类方法或执行一系列操作,以生成响应或处理请求的业务逻辑。
               e.数据传递:路由处理过程中,服务器将请求的相关信息传递给处理程序或控制器。这可能包括URL中的参数、查询参数、请求头、请求主体等数据,以供处理程序使用。
                f.执行操作:处理程序或控制器根据具体业务逻辑执行相应的操作。这可能涉及读取数据库、计算数据、调用其他服务或生成响应内容等操作。

四.服务器响应

        服务器处理完请求后,会生成一个http响应,其中包含响应头和响应体。响应头包含相应的状态码(如200表示成功,404表示未找到等)和其他相关信息。

        


  1. 响应头(Response Headers):响应头包含了关于响应的元数据信息:

    以下是一些常见的响应头字段:
                a.状态码(Status Code):指示请求处理的结果状态。例如,200表示成功,404表示未找到,500表示服务器内部错误等。状态码提供了客户端了解服务器响应的重要信息     
    
                        1xx:信息性状态码,表示服务器已接收到请求并且正在处理。

 

                        2xx:成功状态码,表示服务器成功处理了请求。
                                200 OK:请求成功,服务器成功返回所请求的资源。
                                201 Created:请求成功,服务器创建了新的资源。
                                204 No Content:请求成功,但服务器没有返回任何内容。
                        3xx:重定向状态码,表示需要进一步操作以完成请求。
                                301 Moved Permanently:请求的资源已永久移动到新位置。
                                302 Found:请求的资源暂时移动到新位置。
                                304 Not Modified:客户端缓存的资源未修改,可以直接使用缓存。
                        4xx:客户端错误状态码,表示客户端发送的请求有误。
                                400 Bad Request:请求无效,服务器无法理解请求。
                                403 Forbidden:请求被服务器拒绝,权限不足。
                                404 Not Found:请求的资源不存在。
                        5xx:服务器错误状态码,表示服务器在处理请求时出现了错误。
                                500 Internal Server Error:服务器内部错误,无法完成请求。
                                502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效的响应。
                                503 Service Unavailable:服务器暂时无法处理请求,通常是由于过载或维护。
                b.内容类型(Content-Type):指示响应体中的数据类型。常见的内容类型包括text/html、application/json、image/jpeg等,以告知客户端如何解析和处理响应体的数据。

 

                c.缓存控制(Cache-Control):指示客户端如何处理响应的缓存。通过设置缓存控制,服务器可以要求客户端缓存响应、重新验证缓存或不缓存响应等。

 

                d.重定向(Location):用于重定向客户端到另一个URL。当服务器需要将请求重定向到其他资源时,会使用该字段指示客户端新的URL地址。
                e.响应时间(Date):指示服务器生成响应的时间。这有助于客户端了解响应的时间信息。
                f.其他自定义字段:服务器还可以通过自定义的响应头字段传递其他额外的信息,以满足特定需求。

        2.响应体(Response Body):响应体包含了服务器返回给客户端的具体数据或资源。响应体的内容根据请求的性质和服务器的处理逻辑而有所不同。例如:

               a.  对于HTML请求,响应体可能包含HTML文档,用于渲染页面。
               b.  对于JSON请求,响应体可能包含JSON格式的数据,用于提供结构化的数据给客户端应用程序。
              c.对于文件下载请求,响应体可能包含文件的二进制数据或文件的URL地址。
              d.对于错误响应,响应体可能包含错误信息或错误页面。

五.接收响应

       浏览器接收到服务器发送的http响应后,开始解析响应头和响应体。


  1. 浏览器会解析响应头。响应头包含了服务器对请求的处理结果和相关的元数据信息,如响应状态码、响应时间、内容类型等。
  2. 浏览器会检查响应状态码。浏览器会根据状态码来判断请求是否成功,并采取相应的操作。例如,如果状态码是200,表示请求成功,浏览器会继续处理响应;如果状态码是404,表示请求的资源不存在,浏览器会显示相应的错误页面。

六.页面响应

        浏览器解析响应体中的HTML,css和JavaScript代码,构建文档对象模型和渲染树。计算渲染树中每个元素的样式,确定每个元素的大小、位置、颜色等属性。浏览器根据样式计算的结果,进行布局(确定元素的准确位置)和绘制(将元素绘制在屏幕上)。


七.加载资源

        在页面渲染过程中,浏览器会发现需要加载其他资源,如图片、脚本文件、样式表等。浏览器会并行地发送请求获取这些资源,并将其添加到页面中。


八.执行JavaScript。

        如果页面中包含JavaScript代码,浏览器会执行这些代码。JavaScript可以改变页面的结构、样式和行为,从而实现交互和动态效果。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值