经典面试题:浏览器输入 URL 背后发生了什么?(图解版)

概述过程

----

分为两个大部分,一部分是生成HTTP请求,另外一部分是浏览器委托协议栈进行通信。

大体分为如下步骤:

  1. 解析url
  2. 生成HTTP请求
  3. 向DNS服务器查询WEB服务器的IP地址
  4. 全世界DNS服务器的接力
  5. 委托协议栈发送信息
  6. 创建套接字
  7. 连接服务器
  8. 收发数据
  9. 断开连接

由于知识点有点多,请各位大佬细听小弟娓娓道来。

生成HTTP请求

--------

解析url

我们的探索之旅从在浏览器中输入网址开始,在介绍浏览器的工作方式之前,让我们先来介绍一下网址,准确来说应该叫URL。

实际上除了“http:”,网址还可以以其他一些文字开头,例如 “ftp:” “file:”
“mailto:”等。之所以有各种各样的URL,是因为通常浏览器是用来访问Web服务器的,但它也可以用来在FTP服务器上下载和上传文件,同时也具备电子邮件客户端的功能。

可以说浏览器是一个具备多种客户端功能的综合性客户端软件

因此它需要一些东西来判断应该使用其中哪种功能来访问相应的数据,而各种不同的URL就是用来确定网址所使用的不同方法,通常我们称之为协议类型

所以说浏览器要做的第一步工作就是对URL进行解析

HTTP

解析完URL之后,我们就知道应该要访问的目标在哪里了。接下来,浏览器会使用HTTP协议来访问Web服务器,在此之前我们先复习一下HTTP协议。

HTTP协议定义了客户端和服务器之间交互的消息内容步骤

首先,客户端会向服务器发送请求消息,请求消息中包含的内容是对谁进行何种操作两个部分。

  • 其中对谁的部分称为URI,这里可以写各种访问目标,而这些访问目标统称为URI(统一资源标识符)。
  • 另一部分称之为方法,表示需要让Web服务器完成怎样的工作。通过下面这张表大家应该能够理解通过方法可以执行怎样的操作。

除此以外,HTTP消息中还有一些用来表示附加信息的头字段。客户端向Web服务器发送数据时,会先发送头部字段,然后再发送数据。

收到请求消息之后,Web服务器会对其中的内容进行解析,根据这些要求来完成自己的工作,然后将结果存放在响应消息中。

在响应消息的开头有一个 状态码解释信息,它用来表示操作的执行结果。

后面就是头字段和网页数据。响应消息会被发送回客户端,当收到之后,浏览器会从消息中读出所需的数据并显示渲染。到这里,HTTP的整个工作就以完成。

其中最常用的一个是GET方法,一般当我们访问Web服务器获取网页数据时,使用的就是GET方法。

另外一个就是POST方法,我们在表单中填写数据并将其发送给Web服务器时就会使用这个POST方法,当我们在网上商城填写收货地址和姓名,或者是在网上填写问卷时,都会遇到带有输入框的网页,而这些可以输入信息的部分就是表单。

使用POST方法时,URI会指向Web服务器中运行的一个应用程序的文件名,典型的例子包括“index.cgi”“index.php”等。然后,在请求消息中,除了方法和URI之外,还要加上传递给应用程序和脚本的数据,也就是表单中填入的数据。当服务器收到消息后,Web服务器会将请求消息中的数据发送给URI指定的应用程序。最后,Web服务器从应用程序接收输出的结果,会将它存放到响应消息中并返回给客户端。

之后会有对HTTP进行详细整理,在此不做赘述。

生成HTTP请求消息

理解了HTTP的基本知识之后,我们回到对浏览器本身的探索中。对URL进行解析之后,浏览器确定了Web服务器和文件名,接下来就是根据这些信息来生成HTTP请求消息。

首先,请求消息的第一行称为请求行

这里的重点是开头的方法,可以告诉Web服务器它应该进行怎样的操作。第一行的末尾需要写上HTTP的版本号,这是为了表示该消息是基于哪个版本的HTTP
规格编写的。

第二行开始为消息头。里面存放了除了请求行外的额外详细信息。如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等。

写完消息头之后,还需要添加一个完全没有内容的空行,然后写上需要发送的数据。这部分称之为消息体。消息体结束之后,整个消息也就随之结束。

发送请求后会收到响应

当我们将上述请求消息发送出去之后,Web服务器会返回响应消息,响应消息的格式以及基本思路和请求消息是相同的,差别只在第一行上。

在响应消息中,第一行的内容为状态码和响应短语࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值