3分钟带你明白HTTP(上)

说到HTTP,相信无论是开发还是测试都不会陌生,我们的日常工作中基本上都会跟它打交道。但是关于HTTP全部的知识点,你真的了解吗?这篇就来让我们好好了解一下HTTP吧。

HTTP协议简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

  • HTTP是基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
  • HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
  • HTTP是一个无状态的协议。(实现会话跟踪详见大话Token、Cookie和Session)
  • HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图
    在这里插入图片描述
  • HTTP默认的端口号为80,HTTPS的端口号为443。

HTTP协议主要有以下几个特点:简单快速(由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快)、灵活(HTTP允许传输任意类型的数据对象)、无连接(限制每次连接只处理一个请求)、无状态(协议对于事务处理没有记忆能力)、支持B/S及C/S模式。

http协议工作流程

我们从每个人日常都会做的一件事情说起吧。当我们打开浏览器输入网址到页面展示到我们面前,究竟发生了什么呢?

其实这就是我们HTTP的一次操作,我们称为一个事务,具体流程如下:

1、用户在浏览器中键入需要访问网页的URL或者点击某个网页中链接,比如https://www.baidu.com;

2、浏览器根据URL中的域名,通过DNS解析出目标网页的IP地址

  a) 浏览器搜索自身的 DNS 缓存。(如果 DNS 缓存中找到百度的 IP 地址,就跳过了接下来查找 IP 地址步骤,直接访问该 IP 地址。)

  b) 搜索操作系统自身的 DNS 缓存。(浏览器没有找到缓存或者缓存已经失效)

  c) 读取硬盘中的 host 文件,里面记录着域名到 IP 地址的映射关系,Mac 电脑 中位于/etc/hosts。(如果前两步骤都没有找到)

  d) 浏览器向宽带运营商服务器或者域名服务器发起一个 DNS 解析请求

3、拿到 IP 地址后,浏览器就向该 IP 所在的服务器建立 TCP 连接(即三次握手,参考绕不开的TCP之三次握手)

4、连接建立起来之后,浏览器就可以向服务器发起 HTTP 请求了,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。(这里比如访问百度首页,就向服务器发起 HTTP 中的 GET请求)

5、服务器接到请求后,经过后台一些处理之后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。(如果是百度首页,就可以把完整的 HTML 页面代码返回给浏览器)

6、浏览器拿到了百度首页的完整 HTML 页面代码,内核和 JS 引擎就会解析和渲染这个页面,里面的 JS、CSS、图片等静态资源也通过一个个 HTTP 请求进行加载。

7、浏览器根据拿到的资源对页面进行渲染,最终把完整的页面呈现给用户。

8、如果浏览器没有后续的请求,那么就会跟服务器端发起 TCP 断开(即四次挥手,参考绕不开的TCP之四次挥手)。如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

上面就是一整个HTTP协议的工作流程,其实当中涉及了其他协议,通过下图了解一下各个协议各自的职责吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中我们提到了Connection:keep-alive,这就不得不说一下长链接和短链接了。

短链接

短连接的操作步骤是:建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。

长链接

在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
长链接操作步骤:建立连接——数据传输…(保持连接)…数据传输——关闭连接
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间

URL、URN和URI

URI,是uniform resource identifier,统一资源标识符,用来唯一标识一个资源。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成:访问资源的命名机制、存放资源的主机名、资源自身的名称,由路径表示,着重强调于资源。

URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:协议(或称为服务方式)、存有该资源的主机IP地址(有时也包括端口号)、主机资源的具体地址,如目录和文件名等。

URN,uniform resource name,统一资源命名,是通过名字来标识资源。

URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。
在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。
相反的是,URL类可以打开一个到达资源的流。

以上我们仅仅对HTTP部分概念做了解释,还有很多面试和工作中会遇到的HTTP相关知识待解释,让我们留在下篇文章,不见不散好嘛~

其他文章可以关注微信公众号测试架构师养成记,还有价值999的资料可以领哦~
在这里插入图片描述

发布了49 篇原创文章 · 获赞 15 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43164644/article/details/102789841