浏览器怎么生成消息的?
浏览器是一个具备多种功能的客户端软件。它的工作是对URL进行解析,从而生成发送给Web服务器的请求消息,具体访问哪个文件由web服务器决定。
- URL:统一资源定位符也可以理解为一段网址 比如:http,ftp,file。
- URI:统一资源标识符,可以看做下图的文件路径名。
- 协议:通信操作的规则定义称为协议(protocol)。
HTTP协议定义了客户端和服务器之间交互的消息内容和步骤,主要通过URI和方法来判断“对什么”“进行怎样的操作”。
“get”“post”属于HTTP的典型用法,除此之外的其他方法在互联网上几乎见不到使用的例子。
- get:请求消息在url上解析速度比post快,但是长度有限制,一般常用于获取数据。
- post:请求消息在消息体中,理论上没有限制,适合发送消息至服务器进行处理,比如表单什么的。
- 其他方法一般用RESTful API的设计中,在手机app和后端服务器交互时会经常用到。
HTTP消息结构
常见的状态码:
注意:1条请求消息中只能写1个URI。如果需要获取多个文件,必须对每个文件单独发送1条请求。
浏览器并不具备将消息发送到网络中
尽管浏览器能够解析网址并生成HTTP消息,但它本身并不具备将消息发送到网络中的功能,这一功能需要委托操作系统来完成,在委托操作系统发送消息时必须提供通信对象的ip地址。
什么是ip地址?
- 互联网和公司内部的局域网都是基于TCP/IP的思路来设计的,就是由一些小的子网,通过路由器 连接起来组成一个大的网络。这里的子网可以理解为用集线器 连接起来的几台计算机 ,我们将它看作一个单位,称为子网。将子网通过路由器连接起来,就形成了一个网络 。而在网络中,所有设备都会分配一个地址,这个地址就相当于现实中某条路上的“×× 号 ×× 室”。其中“号”对应的号码是分配给整个子网的,而“室”对应的号码是分配给子网中的计算机的,这就是网络中的地址。“号”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体称为IP地址。
那么ip地址又是怎么组成的呢?
- 实际的IP地址是一串32比特的数字,按照8比特(1字节)为一组分成4组,分别用十进制表示然后再用圆点隔开,但仅凭这一串数字我们无法区分哪部分是网络号,哪部分是主机号。在IP地址的规则中,网络号和主机号连起来总共是32比特,但这两部分的具体结构是不固定的。在组建网络时,用户可以自行决定它们之间的分配关系,因此,我们还需要另外的附加信息来表示IP地址的内部结构。
- 这一附加信息称为子网掩码,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上。
ip地址那么长你记得住吗?
- 使用域名指向难记的ip地址是目前现有的解决的方案。
- 那么为什么不直接用域名确定通信对象呢?域名最短都要几十个字节,运行效率上肯定不如ip地址4字节快。。。。
让人来使用名称,让路由器来使用IP地址。需要有一个机制能够通过名称来查询IP地址,那就是DNS服务器(域名服务系统)
那么浏览器是如何向DNS服务器发出查询的呢?
- 根据域名查询IP地址时,浏览器会使用Socket库中(用于调用网络功能的程序组件集合)的解析器(DNS客户端)向DNS服务器发送请求。
- DNS服务器也是需要具体到IP地址的。解析器会根据这里设置的DNS服务器IP地址来发送消息。
那么DNS服务器又是怎么工作的呢?
- 来自客户端的查询消息包含以下3种信息:
- 域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称
- Class:用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此Class的值永远是代表互联网的IN
- 记录类型:当类型为A时,表示域名对应的是IP地址;当类型为MX时,表示域名对应的是邮件服务器。对于不同的记录类型,服务器向客户端返回的信息也会不同
- DNS服务器会从域名与IP地址的对照表中查找相应的记录,并返回IP地址
世界上域名这么多有没有想过是怎么存储的?为什么查询速度这么快?
- 这就涉及到域名的层次结构了,首先一段地址“www.lab.glasscom.com.”这里的句点代表了不同层次之间的界限,越往右层级越高。因此,com域的下一层是glasscom域,再下一层是lab域,再下面才是www这个名字。在互联网中,com的上面还有一级域,称为根域。上级DNS服务器保管着所有下级DNS服务器的信息,所以我们可以从根域开始一路往下顺藤摸瓜找到任意一个域的DNS服务器。
- 通过缓存加快DNS服务器的响应,“不存在”的结果也会缓存,有过期时间。DNS服务器会告知是来自缓存还是查询
这样,浏览器就知道了Web服务器的IP地址,知道ip地址后需要委托系统内部的协议栈才能向这个目标IP地址发送消息。
协议栈是怎么发送消息的?
- 向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用Socket库中的程序组件。
- 管道并不是一开始就存在的,双方需要先建立管道而建立管道的关键在于管道两端的数据出入口,这些出入口称为套接字。双方套接字连接起来就形成了管道,管道建立起来双方的通信就算准备完成了。当数据全部发送完毕之后,连接的管道将会被断开。管道在连接时是由客户端发起的,但在断开时可以由客户端或服务器任意一方发起
总结:
- 浏览器负责解析URL,常见的URL:http,ftp。具体格式由前缀决定
- 因为ip地址不太容易记住,需要用域名代替ip地址,所以需要获取域名对应的ip地址,也就是委托Socket库的解析器(DNS客户端)向DNS服务器发送查询。
- 浏览器因为没有通信的能力所以获取ip地址后需要委托协议栈使用TCP/IP协议建立连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人