当你输入URL并按下回车后,发生了什么?

news2024/11/27 2:48:53

大概发生了八步的事情:
URL解析->DNS解析->服务器建立连接->发送HTTP请求->服务器处理请求->服务器响应->接收和渲染页面->关闭连接

URL解析

URL,统一资源定位符,是用来表示从互联网上得到的资源位置和访问这些资源的方法,俗称网址!互联网上的所有资源,都有一个唯一确定的URL。
URL的一般形式由一下四个部分组成:
<协议>://<主机>:<端口>/<路径>
URL的第一部分是最左边的<协议>。这里的<协议>就是指出使用什么协议来获取万维网文档。现在最常用的协议就是http(超文本传输协议HTTP),其次就是ftp(文件传输协议FTP)。
在协议后面的:// 是规定的格式。它的右边是第二部分<主机>,它指出这个万维网文档是在哪一台主机上。这里的<主机>就是指该主机在互联网上的域名 。在后面是第三部分和第四部分<端口>和<路径>,有时可以省略。
如果是采用http协议访问万维网文档,如果省略端口,走会访问默认端口80,如果省略路径,则URL就指到互联网上的某个主页(home page)。
而URL解析,就是当用户输入URL并回车后,浏览器对拿到的URL进行识别,抽取出域名字段,比如https://www.baidu.com,它的域名就是www.baidu.com,拿到域名后,就会顺利进行第二步了,就是DNS域名解析!

DNS域名解析

域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名转换为IP地址。
用户与互联网上的某台主机通信时,必须要知道对方的IP地址。然而用户很难记住长达32位的二进制主机地址。及时是点分十进制IP地址也并不容易记忆。但是在应用层为了方便用户记忆各种网络应用,连接在互联网上的主机不仅有IP地址,而且还有便于用户记忆的主机名字(域名)。域名系统DNS能够把互联网上的主机名字转换为IP地址。
既然互联网上的每一台主机都有主机名字,那么为什么机器在处理IP数据报的时候要使用IP地址而不是用域名呢?

简单来说,这是因为IP地址的长度是固定的32位(如果是IPv6地址,那就是固定的128位,也是定长的),而域名的长度并不是固定的,机器处理起来比较困难。
注意,可以在浏览器中输入域名得出网页内容,也可以输入对应的IP地址得到网页内容。虽然得出的内容是一样的,但调用的过程不一样,输入IP地址是直接从主机上调用内容,输入域名是通过对应的域名解析服务器指向对应的主机IP地址,在从主机中调用网址的内容
在这里插入图片描述

建立TCP连接(三次握手)

第一次握手:客户端向服务器发送请求(SYN=1)等待服务器响应;
第二次握手:服务器收到请求并确认,回复一个指令(SYN=1,ACK=1)
第三次握手:客户端收到服务器回复的指令并返回确认(ACK=1)。
在这里插入图片描述
为什么A最后还要发送一次确认呢?请读者稍加思考一下!
这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而产生错误!
所谓的已失效的请求报文段是这样产生的。考虑一种正常情况,A发出连接请求,但因连接请求报文丢失而未收到确认。于是A在重传一次连接请求。后来收到了来自服务器的连接请求确认,建立了连接。数据传输完毕后,就通过四次挥手释放了连接。在该过程中,A共发出了两个连接请求报文段,其中第一个丢失,第二个达到了B,没有已失效的连接请求报文段。
现假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才达到B。本来这是一个早已失效的报文段,但B收到此失效的连接请求报文段后,就误认为是A又发出了一次新的连接请求。于是就想A发出确认连接报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。
由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却认为新的运输连接已经建立了,并一直等待A发送数据。于是B的资源就这样白白浪费了。

发送HTTP请求

HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的应用层协议。
HTTP有两类报文:
(1)请求报文——从客户端向服务器发送请求报文。如下图所示。
(2)响应报文——从服务器到客户端的回答。

在这里插入图片描述
HTTP请求报文有三部分组成,即请求行,首部行和实体主体三部分组成。
请求报文的第一行,请求行只有三个内容,即方法,请求资源的URL以及HTTP的版本。
这里的方法就是对所请求的对象进行操作这些方法实际上也就是一些命令。下图给出了请求报文常见的几种方法。

方法(操作)方法(操作)
OPTION请求一些选项的信息
GET请求读取由URL所标志的信息
HEAD请求读取由URL所标志的信息的首部
POST给服务器添加信息
PUT在指明的URL下存储一个文档
DELETE删除指明的URL所标志的资源
TRACE用来进行环回测试的请求报文
CONNECT用于代理服务器

下面是一个HTTP的请求报文的开始行的格式,由方法,域名以及HTTP的版本构成。注意(方法与域名之间含空格,域名与HTTP版本之间也含空格)。

GET http://www.xyz.edu.cn/dir/index.html HTTP/1.1

服务器处理相关的请求

接受HTTP报文后,会对连接进行处理,对HTTP协议进行解析(请求方法、域名、路径等),并且进行一些验证:
验证是否配置虚拟主机
验证虚拟主机是否接受此方法
验证该用户可以使用该方法(根据 IP 地址、身份信息等)
重定向
假如服务器配置了 HTTP 重定向,就会返回一个 301永久重定向响应,浏览器就会根据响应,重新发送 HTTP 请求(重新执行上面的过程)。
URL 重写
然后会查看 URL 重写规则,如果请求的文件是真实存在的,比如图片、html、css、js文件等,则会直接把这个文件返回。
否则服务器会按照规则把请求重写到 一个 REST 风格的 URL 上。
然后根据动态语言的脚本,来决定调用什么类型的动态文件解释器来处理这个请求。
具体流程如下所示:
在这里插入图片描述

返回响应的结果

服务器每收到一个请求报文后,对应的都会回复一个响应报文。
HTTP的响应报文由状态行,首部行以及实体主体组成,一般用开始行是请求行还是状态行来区分是请求报文还是响应报文! 具体的响应报文格式如下:
在这里插入图片描述
响应报文的第一行就是状态行,状态行包括版本,状态码以及短语组成。
状态码都是三位数字构成的,分为5大类,原先有33种,后来又增加了几种。这5大类的状态码都是以不同的数字开头的。

状态码意义
1xx表示通知信息,如请求收到了或正在进行处理
2xx表示成功,如接受或知道了
3xx表示重定向,如要完成请求还必须采取进一步的行动
4xx表示客户的差错,如请求中有错误的语法或不能完成
5xx表示服务器的错误,如服务器失效无法完成请求

下面是响应报文中经常见到的

HTTP/1.1 202 Accepted   {接受}
HTTP/1.1 400 Bad Request {错误的请求}
HTTP/1.1 404 Not Found {找不到}

关闭TCP连接(四次挥手)

第一次挥手:客户端向服务器发送连接释放报文段(FIN=1),等待服务器响应;
第二次挥手:服务器收到连接释放报文文段并发出确认(ACK=1),客户端到服务器的连接关闭,此时TCP处于半关闭状态,需要等到服务器向客户端发送数据结束;
第三次挥手:服务器向客户端发送连接释放报文段(FIN=1,ACK=1),并等待客户端的确认;
第四次挥手:客户端收到服务器的连接释放报文段并给出确认(ACK=1),连接释放。
在这里插入图片描述

HTML解析与页面渲染

HTML解析与页面渲染的过程如下所示
HTMl解析与页面渲染的过程如下所示:
1.浏览器获取到 html 资源后开始解析 html (dom tree)
2.解析到 css 后根据 css 生成 css 规则树 (style rules)
3.在 dom 树和 css 规则树都生成完后,通过 dom 树和 css 规则树生成渲染树( render tree )
4.渲染树构建完成后,浏览器开始计算元素的大小和位置( layout )
5.根据计算好的节点信息将内容绘制到屏幕上( painting )

因此当你输入URL并按下回车后,具体过程如下:

  1. URL解析:浏览器会解析输入的URL,将其分解为不同的组成部分。例如协议(通常是HTTP或HTTPS),域名(例如www.example.com),以及可选的端口号,路径和查询参数等。
  2. DNS解析:浏览器需要将域名解析为IP地址,以便能够与服务器进行通信。它会首先检查浏览器缓存中是否有与该域名对应的IP地址。如果没有,则向DNS服务器发送查询请求,以获取该域名对应的IP地址。一旦找到IP地址,浏览器就可以建立与服务器的连接。
  3. 建立连接:浏览器使用HTTP或HTTPS协议与服务器建立TCP连接,以便在服务器和浏览器之间传输数据。这个过程会进入一些握手和验证的步骤,以确保连接的安全性和稳定性。
  4. 发送HTTP请求:一旦连接建立好,浏览器会发送一个HTTP请求到指定的服务器。这个请求中包含了请求的方法(GET,POST等),路径,请求头部和可选的请求体等信息。
  5. 服务器处理请求:服务器收到浏览器发送的请求后,会根据请求中的信息来处理请求。服务器可能会执行一些操作,例如查找请求的资源,执行服务器端的逻辑,查询数据库等。
  6. 服务器响应:一旦服务器处理完请求,就会生成一个HTTP响应并返回给浏览器。这个响应中包含了响应的状态码,响应头部和响应体等信息。常见的状态码有200表示成功,404表示资源未找到,500表示服务器内部错误等。
  7. 接收和渲染页面:浏览器接收到服务器返回的响应后,会根据响应的内容进行解析和渲染。如果响应是一个HTML页面,浏览器会解析HTML,CSS和JavaScript,并将其渲染成可视化的页面。同时,浏览器还会发送其他的请求来获取页面中引用的其他资源,例如图片,样式表,JavaScript文件等。
  8. 关闭连接:一旦浏览器完成对页面的渲染,它会关闭与服务器的连接,释放网络资源。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM DynamIQ简介

DynamIQ是ARM一个新的底层solution&#xff0c;用于连接在一个芯片上的不同core&#xff0c;将多个core连接起来。 有了DynamIQ&#xff0c;我们可以将不同类型的core放到一个cluster中。比如&#xff0c;将性能高的core&#xff0c;和功耗低的core放进一个cluster&#xff0c;…

【uni-app】常用图标、头像汇总

在做小程序的时候&#xff0c;有时候需要各种图标和头像素材&#xff0c;而百度一堆基本都是收费的。所以&#xff0c;整理一些免费好用的图标&#xff0c;头像库&#xff1a; 1、iconfont-阿里巴巴矢量图标库 基本上常用的矢量图标&#xff0c;在这儿都有&#xff0c;而且可…

基于SSM框架的汽车在线销售系统设计与实现

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战。专注于计算机毕设开发、定制、文档编写指导等&#xff0c;对软件开发具有浓厚的兴趣&#xff0c;工作之余喜欢钻研技术&#xff0c;关注IT技术的发展趋势&#xff0c;感谢大家的关注与支持。 技术交流和部署相关看文章…

Eureka的使用手册

一、导入依赖&#xff08;服务端和客户端导入的依赖不一样&#xff09; 服务端&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependenc…

『数据增强』yolov5 数据增强 与 红外数据增强

目录 yolov5 数据增强 Mosaic Copy paste Random affine MixUp Albumentations Augment HSV(Hue, Saturation,Value) Random horizontal flip 红外数据增强 红外图像的缺点 红外成像技术的特点 红外图像增强经…

常用电子元器件检测方法与经验

电子元器件检测是电子工程师和技术人员工作中不可或缺的一部分。在电子元器件制造和使用过程中&#xff0c;需要对元器件进行检测&#xff0c;以确保其质量和性能符合要求。在本文中&#xff0c;我们将介绍常用的电子元器件检测方法和经验&#xff0c;以帮助读者更好地了解和掌…

redux之reducer 为什么必须是纯函数?

在一个应用中&#xff0c;所有的 state 都是以一个对象树的形式存在一个单一的 store 中&#xff0c;唯一改变 state 的办法就是触发 action&#xff0c;而 reducer 就是用来编写专门的函数决定每个 action 如何改变应用的 state 。 在 Redux store 中保存了 reducer 返回的 这…

make/makefile的使用

make/makefile 文章目录 make/makefile初步认识makefile的工作流程依赖关系和依赖方法make的使用 总结 make是一个命令&#xff0c;是一个解释makefile中指令的命令工具&#xff0c;makefile是一个文件&#xff0c;当前目录下的文件&#xff0c;两者搭配使用&#xff0c;完成项…

RabbitMQ ---- 延迟队列

RabbitMQ ---- 延迟队列 1. 延迟队列的概念2. 延时队列使用场景3. RabbitMQ 中的 TTL3.1 消息设置 TTL3.2 队列设置 TTL3.3 两者的区别 4. 整合 springboot4.1 创建项目4.2 添加依赖4.3 修改配置文件4.4 添加 Swagger 配置类 5. 队列 TTL5.1 代码架构图5.2 配置文件类代码5.3 消…

基于PyQt5的UI界面开发——菜单与工具栏

窗口类型 我们进入QtDesigner&#xff0c;创建主窗口有三种类型&#xff1a;QMainWindow、QDialog 和 QWidget。 在新建应用程序窗口&#xff0c;通常选择 MainWindow 创建主窗口的图形界面就可以了。QtDesigner 创建的 “MainWindow” 虽然是一个空白的图形窗口&#xff0c;但…

Redis进阶底层原理 - 高可用哨兵模式

Redis哨兵模式是redis实现高可用的一种分布式架构。哨兵节点是一种特殊的Redis实例&#xff0c;它不用于存储业务数据&#xff0c;它主要工作内容如下&#xff1a;&#xff08;高可用不是指不出问题&#xff0c;而是出了问题后能及时的自动化解决&#xff0c;从而在客户端无感&…

Qt 项目架构之----MVC架构

MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09;-是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View&#xff08;视图&#x…

web攻击

web攻击分为&#xff0c;信息泄露&#xff0c;弱口令&#xff0c;xss攻击&#xff0c;sql注入&#xff0c;文件上传&#xff0c;文件包含&#xff0c;webs hell&#xff0c;命令执行&#xff0c;xml实体注入。 #信息泄露 信息泄露主要包括敏感信息的信息&#xff0c;像口令&…

leetcode1171. 从链表中删去总和值为零的连续节点

1171. 从链表中删去总和值为零的连续节点 - 力扣&#xff08;Leetcode&#xff09; 累加数据和重复出现相同时&#xff0c;说明从相同和的第一次出现的下一个结点到最后一次相同累加数据的结点和为0&#xff0c;删除这段结点串、 给你一个链表的头节点 head&#xff0c;请你编…

Yocto系列讲解[技巧篇]92 - armv8 aarch64兼容armv7 32位程序运行环境

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述使能Multilib支持32位的helloworld程序执行出现No such file or directorylibc.so.6 cannot open shared object file修改内容固化…

整数数组的奇数位于数组的前半部分,偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变

题目&#xff1a;输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于数组的后半部分&#xff0c;并保证奇数和奇数&#xff0c;偶数和偶数之间的相对位置不变。 思路1&#xff1a; 类…

一.CreateFileMapping实现的共享内存及用法

共享内存概念 1.在32位的Windows系统中&#xff0c;每一个进程都有权访问他自己的4GB&#xff08;2324294967296&#xff09;平面地址空间&#xff0c;没有段&#xff0c;没有选择符&#xff0c;没有near和far指针&#xff0c;没有near和far函数调用&#xff0c;也没有内存模式…

CUDA并行编程

gpu 图形处理专用单元 cpu是主机单元 gpu显卡处理器 专门执行复杂数学和几何计算 不同表面有不同光纤效果 必须达到快速计算能力 gpu专门设计为大规模并行吞吐处理设计 用于加速图形显示 &#xff0c; 吞吐量高 峰值计算能力 4612 GFLOP/S 一秒钟可以计算4612G次浮点数计算…

SQL注入实操

文章目录 一、sqli-lab靶场搭建二、通关笔记1.Less-1a.单引号‘b.updatexmlc.concatd.unione.information_schemaf.GROUP_CONCATg.select 1,2 2.Less-2 一、sqli-lab靶场搭建 下载路径&#xff1a;https://www.hibugs.net/hi-resource/sqli-labs-master.zip 下载后解压复制到w…