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.0
与 HTTP1.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
提出了管线化理论
基于 HTTP
的 WebSocket
WebSocket
即 Web
浏览器与 Web
服务器之间全双工通信标准。其中 WebSocket
协议由 IETF
定为标准,WebSocket API
由 W3C
定为标准。仍在开发中的 WebSocket
技术主要是为了解决 Ajax
和 Comet
里 XMLHttpRequest
附带的缺陷所引起的问题。所以说,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