全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接

用户输入URL地址,与服务器建立连接

用户在浏览器地址栏输入一个URL

浏览器开始执行以下三步操作操作:url解析、DNS查询、TCP连接

第一步:URL解析

什么是URL?
URL(Uniform Resource Locator,统一资源定位符)是互联网上标准资源的地址,互联网上每个文件(即资源)都有一个唯一的URL,它包含了文件的位置以及浏览器处理方式等信息。

URL 标准格式

scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]

如:https://www.baidu.com/s?wd=url&rsv_spt=1

scheme:协议名称,http、https、ftp等。
host:HTTP服务器的IP地址或者域名,如www.baidu.com
port:HTTP服务器的默认端口是80,此端口可以省略。如vscode启动vue,用 http://localhost:5173/端口path:访问资源的路径
url-params:参数
query-string:发送给http服务器的数据
anchor:锚点定位

浏览器解析URL,确定协议(如HTTP或HTTPS)、主机名、端口(默认为80或443)以及路径(如/path/to/page.html)

第二步:DNS查询

域名就是起一个方便记忆的名字,否则直接使用服务器的外网IP访问服务器不好记忆,操作不方便

1、 DNS
DNS是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于TCP/IP网络。

2、域名DNS作用
域名系统是将IP地址与域名相互映射的一个分布式数据库

在浏览器输入某个Web服务器的域名时

(1) 用户主机首先会在自己的DNS高速缓存中查找该域名所对应的IP地址。

(2)如没有,向网络中的某台DNS服务器查询,DNS服务器中有域名和IP地址映射关系的数据库
(3) 之后将查询结果发送给用户主机。

(4)用户主机中的浏览器可以通过Web服务器的IP地址对其进行访问了。

3、域名的种类

  • 顶级域名 baidu.com
  • 一级域名 www.baidu.com
  • 二级域名 sports.baidu.com
  • 三级域名 kbs.sports.baidu.com
  • .com 国际域名
  • .cn 中文域名
  • .com.cn
  • .edu 教育网
  • .gov 国家政府单位
  • .io 博客
  • .org 官方组织
  • .net 系统类

第三步:TCP连接

TCP(Transmission Control Protocol,传输控制协议)是互联网协议套件中一种核心协议。它提供面向连接的、可靠的字节流传输服务,确保数据从一端正确无误地传输到另一端。

四层协议将 数据链路层和物理层合并为 “网络接口层”

1、TCP 连接建立:三次握手

在这里插入图片描述

常见面试题:

为什么TCP需要三次握手,为什么不设计成两次握手:

  1. 确保双方都准备好接收连接‌:通过三次握手,客户端和服务器可以确认彼此都准备好接收连接请求,从而建立起可靠的连接。如果只进行两次握手,可能会出现客户端发送的SYN包在网络中丢失,导致服务器无法接收到连接请求,连接无法建立‌
  2. 防止已失效的连接请求报文再次传送到服务器‌:如果采用两次握手,可能会出现网络延迟或拥堵导致旧的连接请求报文在网络中滞留。当客户端重新发送连接请求时,服务器可能会误以为这是新的请求并建立连接,导致资源浪费‌。
  3. 同步初始序列号‌:TCP通过序列号来标识发送的数据包,确保数据的顺序性和完整性。在三次握手过程中,双方会交换初始序列号,以便后续的数据传输能够正确进行‌。

为什么不设计成次五次握手:

三次握手就可以符合实际情况,所以就没必要设计成四次握手、五次握手等情况,浪费资源

**结论:**三次握手能够确保连接的可靠性、同步初始序列号,并防止已失效的连接请求报文再次传送到服务器,而两次握手无法满足这些需求,因此TCP选择了三次握手而不是两次握手,超过三次握手,浪费资源。

##2、 TCP 连接断开:四次挥手

就是客户端与服务器断开连接时,需要一共发送四个报文段来完成断开TCP连接

在这里插入图片描述

浏览器根据协议与服务器建立连接,通常涉及三次握手过程以确保可靠的数据传输通道。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922707.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32总体架构简单介绍

目录 一、引言 二、STM32的总体架构 1、三个被动单元 (1)内部SRAM (2)内部闪存存储器 (3)AHB到APB的桥(AHB to APBx) 2、四个主动(驱动)单元 &#x…

postman 调用 下载接口(download)使用默认名称(response.txt 或随机名称)

官网地址:https://www.postman.com 介绍 Postman 是一款流行的 API 开发和测试工具,用于发送 HTTP 请求、测试接口、调试服务器响应以及进行 API 文档管理。它支持多种请求类型(如 GET、POST、PUT、DELETE 等),并且功能…

JavaScript将至

JS是什么? 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果 作用捏? 网页特效 (监听用户的一些行为让网页作出对应的反馈) 表单验证 (针对表单数据的合法性进行判断) 数据交互 (获取后台的数据, 渲染到前…

Vue.js 学习总结(13)—— Vue3 version 计数介绍

前言 Vue3.5 提出了两个重要概念:version计数和双向链表,作为在内存和计算方面性能提升的最大功臣。既然都重要,那就单挑 version 计数来介绍,它在依赖追踪过程中,起到快速判断依赖项有没有更新的作用,所以…

全面解析多种mfc140u.dll丢失的解决方法,五种方法详细解决

当你满心期待地打开某个常用软件,却突然弹出一个错误框,提示“mfc140u.dll丢失”,那一刻,你的好心情可能瞬间消失。这种情况在很多电脑用户的使用过程中都可能出现。无论是游戏玩家还是办公族,面对这个问题都可能不知所…

《Spring 实战:小型项目开发初体验》

一、引言 Spring 作为一款强大的 Java 开发框架,在小型项目开发中有着广泛的应用。本文将带你深入体验 Spring 在小型项目开发中的实战过程,从环境搭建到项目部署,全面展示 Spring 的魅力。 一、引言 Spring 作为一款强大的 Java 开发框架&…

Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建

基于Altium Designer 23学习版,四层板智能小车PCB 更多AD学习笔记:Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制 目录 11、Value值的核对 12、封装的统一管理 13、原理图的编译设置和检查…

【Spring Boot】# 使用@Scheduled注解无法执行定时任务

1. 前言 在 Spring Boot中,使用Scheduled注解来定义定时任务时,定时任务不执行;或未在规定时间执行。 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;Component public c…

Spring Boot3远程调用工具RestClient

Spring Boot3.2之后web模块提供了一个新的远程调用工具RestClient,它的使用比RestTemplate方便,开箱即用,不需要单独注入到容器之中,友好的rest风格调用。下面简单的介绍一下该工具的使用。 一、写几个rest风格测试接口 RestCont…

VLAN是什么,一个好的网络为什么要划分VLAN呢?

前言 在上一篇中讲解了交换机的工作原理,知道了交换机处理数据的转发方式,其中有两种情况会以广播方式进行发送数据,第一种是目的MAC是全F的,以及组播MAC,第二种是未知单播帧,那这个会带来什么样的问题呢&…

flowable流程图详细绘制教程

文章目录 前言一、flowable是什么?回答下之前的问题 二、flowable-modeler使用1. 使用步骤2.开始绘制弄一个请假的流程 三 加载该流程总结 前言 flowable有些晦涩难懂的东西: 我最开始接触的时候,还是用的activity,当时觉得好复杂,那么这次经过我自己在…

蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、组合数问题:::非常典型的必刷例题!!!)

下将以括号序列、组合数问题超级吧难的题为例子讲解动态规划 别忘了请点个赞收藏关注支持一下博主喵!!!! ! ! ! ! 关注博主,更多蓝桥杯nice题目静待更新:) 动态规划 一、数字三角形 【问题描述】 上图给出了一…

[Python3学习笔记-基础语法] Python3 基础语法

本篇文章详细介绍Python3的基础语法,主要包括编码、标识符、Python保留字、注释、行缩进、多行语句、Number类型、字符串、空行、print打印等。 这些是Python最基础的东西,掌握好了才能更好的学习后续的内容。 有兴趣共同结伴学习Python的朋友&#xff0…

HDR视频技术之三:色度学与颜色空间

HDR 技术的第二个理论基础是色度学。从前面的内容中可以了解到,光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础,但是 HDR 技术不仅仅关注于提升图像与视频的亮度范围,同时也关注于提供更加丰富的色彩。因此&#xff…

数据库MYSQL——表的设计

文章目录 前言三大范式:几种实体间的关系:一对一关系:一对多关系:多对多关系: 前言 之前的博客中我们讲解的是关于数据库的增删改查与约束的基本操作, 是在已经创建数据库,表之上的操作。 在实…

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中,自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言,自动化测试尤为重要,它能有效捕捉代码中的潜在缺陷,提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test(GTe…

备忘笔记-工具:JetBrains友好工具安装配置

1、配置/脚本文件下载 1、校验地址:https://3.jetbra.in/ 打开选择可用链接,点击跳转可用页面。 2、下载文件 左上角点击下载jetbra.zip文件 下载对应全家桶软件版本号,版本号在对应卡票右上角可见。 2、安装包下载 官网地址&#xff1a…

Flask 基于wsgi源码启动流程

1. 点击 __call__ 进入到源码 2. 找到 __call__ 方法 return 执行的是 wsgi方法 3. 点击 wsgi 方法 进到 wsgi return 执行的是 response 方法 4. 点击response 方法 进到 full_dispatch_request 5. full_dispatch_request 执行finalize_request 方法 6. finalize_request …

Linux 下进程基本概念与状态

文章目录 一、进程的定义二、 描述进程-PCBtask_ struct内容分类 三、 进程状态 一、进程的定义 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。广义定义:进程是一个具有一定…

IDEA使用tips(LTS✍)

一、查找项目中某个外部库依赖类的pom来源 1、显示图 2、导出Maven 项目依赖的可视化输出文件 3、点击要查找的目标类,项目中定位后复制依赖名称 4、在导出的依赖的可视化文件中搜索查找 5、综上得到,Around类来自于pom中的spring-boot-starter-aop:jar…