HTTP协议认识

HTTP 协议概述

HTTP 协议,即超文本传输协议,HTTP 协议详细规定了浏览器和万维网服务器之间互相通信的规则,是一个应用层协议。 所谓“超文本”,就是在纯文本(普通文字)的基础上添加了图片、视频、音频、超链接等,超出了文本的范畴,这样的文本就是超文本。超文本使用 HTML 即超文本标记语言来描述和展示

请求访问文本或图像等资源的一端称为客户端(比如浏览器),而提供资源响应的一端称为服务器端。简单的说,HTTP 就是一个通信规则,规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式

HTTP 的无状态

HTTP 是一种不保存状态的协议,即无状态协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理

使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的

可是,随着 Web 的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能够掌握是谁送出的请求,需要保存用户的状态

HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术。比如,服务器把想要记住的信息通过 Cookie 发送到客户端(浏览器),客户端将 Cookie 保存在本地,下一次请求服务器的时候,就会自动带上这个Cookie,服务器就能解析这个 Cookie 获取相关信息,比如是否已登陆。有了 Cookie 再用 HTTP 协议通信,就可以在一定程度上管理会话状态了

Cookie 状态管理

  • Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去
  • 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

没有 Cookie 信息状态下的请求

在这里插入图片描述
2 次以后(存有 Cookie 信息状态)的请求

在这里插入图片描述

请求 URI

HTTP 协议使用 URI 定位互联网上的资源。正是因为 URI 的特定功能,在互联网上任意位置的资源都能访问到

当客户端请求访问资源而发送请求时,URI 需要将作为请求报文中的请求 URI 包含在内。指定请求 URI 的类型有很多,目前用得最广泛的就是 URL,它是 URI 的一种实现方式,即通过资源的位置来定位资源。但是目前,更倾向于将请求地址说成是 URI,它是最准确的

长连接和短连接

HTTP/1.0 中默认使用短连接。 也就是说,客户端和服务器每进行一次 HTTP 请求,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的Web页中包含有其他的 Web 资源(如 JavaScript 文件、图像文件、CSS文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话

而从 HTTP/1.1 起,所有的连接默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入“Connection=keep-alive”属性

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时(多次请求),会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如 Apache)中设定这个时间

HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。HTTP 属于应用层协议,在传输层使用 TCP 协议,在网络层使用 IP 协议。 IP 协议主要解决网络路由和寻址问题,TCP 协议主要解决如何在 IP 层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP 协议是可靠的、面向连接的

HTTP 协议的发展

HTTP1.0HTTP1.1

  • HTTP1.0 默认是短连接,HTTP1.1 默认是长连接:HTTP1.0 默认是短连接,每次与服务器交互,都需要新开一个连接,每个连接都只能传送一个请求和响应,随后连接就会关闭。我们知道 HTTP 协议是基于 TCP 的,TCP 每次都要经过三次握手,四次挥手,这就需要去消耗我们很多的资源的
  • HTTP 1.1 增加了 host 字段:HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个 IP 地址
  • HTTP 1.1 中引入了 Chunked transfer-coding,范围请求,实现断点续传(实际上就是利用的 HTTP 消息头使用分块传输编码,将实体主体分块传输)
  • HTTP 1.1 提出了管线化理论

基于 HTTPWebSocket

WebSocketWeb 浏览器与 Web 服务器之间全双工通信标准。其中 WebSocket 协议由 IETF 定为标准,WebSocket APIW3C 定为标准。仍在开发中的 WebSocket 技术主要是为了解决 AjaxCometXMLHttpRequest 附带的缺陷所引起的问题。所以说,WebSocket 是一种网络通信协议

HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息,而一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML 或图片等任意格式的数据

由于 WebSocket 是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端,而一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。通常可以使用 WebSocket 协议实现在线网页聊天系统、各种客服系统等,因此 WebSocket 协议非常的重要

WebSocket 协议的主要特点

  • 推送功能:支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求
  • 减少通信量:只要建立起 WebSocket 连接,就希望一直保持连接状态。和 HTTP 相比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息很小,通信量也相应减少了

在这里插入图片描述
参考:https://blog.csdn.net/weixin_43767015/article/details/112275504

猜你喜欢

转载自blog.csdn.net/weixin_38192427/article/details/115010533