你不知道的小知识 | 发送的请求到底经历了什么?

前言

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。你了解 HTTP 吗?你可能会说 “不就是超文本传输协议嘛,规定了 Web 服务器与浏览器之间信息传递的规范。” 但一个前端请求从发出到服务器端返回响应结果这之间到底发生了什么,你是不是想说却不知从和说起或者说不清楚呢? 本文通过两个角度进行剖析,干货满满,今天把这个小知识分享给大家,鄙人拙见,还望各位不吝赐教!

正文

基于浏览器和服务器分析

发送请求

当我们在浏览器中输入一个合法网址,准确的说,网址应该叫 URLUniform Resource Locator)统一资源定位符,有各种各样的 URL 让我们不仅能够访问 Web 服务器上的资源,还能用浏览器在 FTP 服务器上下载和上传文件,同时也具备电子邮件客户端的功能,可以说,浏览器是一个具备多种客户端功能的综合性客户端软件,因此它需要特定的标识来判断应该使用哪种功能来访问相应的数据,而各种不同的 URL 就是用来干这个的。

例如:

  • 使用 HTTP 协议访问 Web 服务器

    • https://[Web服务器域名]:[端口号]/[文件路径名]
  • 使用 FTP 协议下载和上传文件

    • ftp://[FTP服务器域名]:[端口号]/[文件路径名]
  • 发送电子邮件

    • mailto:[邮箱地址]
  • 读取客户端计算机本地文件

    • file://[本地计算机名(可省略)]/[本地文件的绝对路径]

解析 URL

发送一个 HTTP 请求,首先浏览器要做的第一步工作就是对 URL 进行解析,从而生成发送给 Web 服务器的请求消息,刚才我们已经讲过了 URL 会随着协议的不同而改变,接下来让我们来康康这一串网址在浏览器眼中是怎么样的

浏览器解析URL.png

由上图可知,通过浏览器对 URL 的解析,明确了访问 www.xxx.com 这个服务器上路径名为 /../xx.html 的文件

对于资源文件路径可以省略的问题,可能有人会产生疑问,没有表名文件路径服务器该访问哪一个文件呢?其实,我们会在服务器上事先设置好文件名省略时要访问的默认文件名,这个设置根据服务器不同而不同,大多数情况下是 index.html 或者 default.html 之类的文件名

生成 HTTP 请求消息

URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些消息生成 HTTP 请求消息了,实际上,HTTP 消息在格式上是有严格规定的,因此浏览器会按照规定的格式来生成请求消息,请求消息包括 HTTP 的版本号消息头消息体

image.png

image.png

返回响应消息

发送请求后,Web 服务器会返回响应消息,响应消息包括 状态码响应短语响应标头响应体,状态码和响应短语用来表示请求的执行结果是否成功,它们之间相互对应。

HTTP 状态码概要

状态码的第一位数字表示状态类型,第二、三位表示具体的状况

状态码 含义
1xx 告知请求的处理进度和状况
2xx 成功
3xx 表示需要进一步操作
4xx 客户端错误
5xx 服务器错误

返回响应消息后,浏览器会将数据提取出来并显示在屏幕上,这是我们就能看到网页的样子了,如果返回的是文字那可能就结束,但是如果网页中包含图片等资源,则需要向服务器请求若干次,直到全部资源加载完成,服务器并不关心请求是来自一个网页的还是几个网页的,它的任务就是对每一条单独的请求返回 1 条响应罢了。

到此,我们通过从发送请求,到浏览器解析以及最后的接收到返回响应消息了解了浏览器与 Web 服务器进行交互的大致过程,但文章到此就结束了吗?不不不,那就显得略拉了  ̄□ ̄||

基于网络通信进行分析

想必各位都有了解过 计算机网络层次结构模型,它是计算机网络中实现通信必须要依靠的网络通信协议,通常被称为 ISO/OSI参考模型

现在,让我们站在这个角度对标题再次进行一次审视,你发送的一个请求经过协议分层传输比特流,通过路由转发到目标 IP 地址的 Web 服务器,再经过服务器的解析返回响应消息,寥寥数句仿佛并不复杂的样子,但是你可能远远不知道从一台电脑上发送请求到目标 Web 服务器这中间发生了多少事情!

为了让大家更清楚且直观地了解这个通信过程,我爆肝了一幅流程图,供大家参考学习:

应用进程基于网路的通信过程.png

结尾

撰文不易,欢迎大家点赞、评论,你的关注、点赞是我坚持的不懈动力,感谢大家能够看到这里!Peace & Love。

猜你喜欢

转载自juejin.im/post/7015922004960215054
今日推荐