超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个应用层协议,用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP 协议的第一个版本只有一个方法,即 GET,它会从服务器请求页面,不支持请求头,主要用于传输纯文本内容。在此 Prortocol 中,连接在单个请求/响应对之后关闭。
HTTP1.0则新增了POST、HEAD请求方式,并支持根据content-type选择多种数据格式,如视频、音频和图片等。此外,HTTP1.0还引入了状态码和缓存功能,使得在一定时间内访问同一网站可以直接访问缓存。然而,HTTP1.0使用的是非持久连接,即每次TCP连接后只能发送一个请求,服务器响应后就会关闭连接。
HTTP/1.1新增了OPTIONS、PUT、DELETE、TRACE和CONNECT等请求方式。HTTP1.1默认使用持久连接,使得一个连接中可以传输多个对象,无需为每个Web对象的传送建立新的连接。这一特性减少了建立和关闭连接的消耗和延迟,提高了性能。此外,HTTP1.1还提供了范围请求功能,允许客户端请求资源的某个部分,而不是整个资源,这有助于优化带宽使用。
首先,HTTP/2引入了多路复用的特性,这意味着在单个连接中,可以并行处理多个请求和响应,无需等待前一个请求完成。每个请求都有一个唯一的ID,服务器可以根据这个ID将响应正确地发送回客户端。这种多路复用的方式极大地提高了传输效率,减少了延迟。
HTTP/2还采用了头部压缩技术。在HTTP1.x中,头部信息往往包含大量重复的内容,这导致了不必要的带宽浪费。而HTTP/2使用编码技术来压缩头部信息,并在两端维护一个头部信息的索引表,以消除重复内容,进一步减少了传输开销。
HTTP/2还新增了服务器推送功能。当服务器检测到客户端需要某些资源时,它可以主动将这些资源推送到客户端,而无需客户端再次发送请求。这种方式特别适合加载静态资源,可以显著提高加载速度。
HTTP/2支持通过HTTPS进行加密传输,确保了数据的安全性。
需要注意的是,尽管HTTP/2在多个方面都有显著的优势,但它并不是完全取代HTTP1.1的。在实际应用中,HTTP/2和HTTP1.1可能会并存一段时间,具体使用哪种协议取决于具体的场景和需求。
HTTP/3是下一代互联网传输协议,相较于之前的HTTP版本,它在多个方面进行了显著的改进和优化。
首先,HTTP/3采用了基于UDP的QUIC协议作为传输层,而不是传统的TCP协议。这使得HTTP/3在连接建立、数据传输和连接迁移等方面具有更高的效率和灵活性。UDP协议的无连接特性使得HTTP/3可以减少建立和关闭连接的开销,提高了响应速度。而QUIC协议则通过一系列创新的设计,解决了UDP在传输过程中的可靠性和安全性问题。
其次,HTTP/3解决了HTTP/2在特定情况下存在的性能问题。它通过使用QUIC协议中的流控制、拥塞控制和错误恢复机制,有效地避免了队头阻塞问题,提高了数据传输的效率和稳定性。此外,HTTP/3还优化了TLS协议加密QUIC头部的方式,提高了网络攻击的成本,同时降低了建立连接的速度。
此外,HTTP/3还提供了跨网络的数据传输能力,适用于多种网络环境,如无线网络、广域网和内部企业网络等。它支持几乎所有流行的操作系统,如Windows、macOS和Linux等,为开发者提供了更加便捷和统一的网络解决方案。
HTTPS(Secure HTTP)是一种安全的超文本传输协议,它是在HTTP的基础上加入了SSL/TLS协议,从而实现了对数据的加密传输和身份验证。
HTTPS的出现主要是为了解决HTTP协议在数据传输过程中的安全性问题:
WebSocket协议是一种基于TCP的应用层协议,它允许在客户端和服务器之间建立持久连接,实现双向通信。这种协议的设计初衷是为了解决HTTP/1.x协议在Web应用中无法实现服务器主动向客户端推送消息的问题。
WebSocket通过HTTP协议进行握手以建立连接,但一旦连接建立,通信就不再依赖于HTTP。这意味着WebSocket连接可以保持打开状态,允许服务器主动发送信息给客户端,而无需客户端定期轮询服务器以获取更新。这种全双工通信方式显著提高了实时性,降低了延迟,并减少了不必要的资源消耗。
WebSocket协议具有以下特点:
WebSocket协议广泛应用于需要实时通信的Web应用,如在线聊天、实时股票行情、多人在线游戏等场景。通过使用WebSocket,这些应用可以实现更高效、更流畅的通信体验。
WebSocket的心跳机制是确保客户端和服务器之间长连接稳定性的关键措施。它的基本思想是定期在连接上发送小型数据包,这些数据包通常被称为“心跳包”,以维持连接的活跃状态。
服务端需要定期发送心跳包给客户端,而客户端在收到心跳包后需要回复确认消息。这样,双方都能确认对方是否仍然在线。
SSE(Server-Sent Events)的主要作用是允许服务器通过单个HTTP连接将实时事件流式传输到客户端。这使得服务器能够主动向客户端推送实时数据更新,而无需客户端主动发起请求。WebSocket和SSE都用于实现实时通信,允许服务器向客户端推送实时更新的信息,无需客户端定期轮询服务器。同样是用于实时通信,它们有着以下区别,在使用中酌情使用:
http与websocket是应用层两种不同的协议,HTTP协议是单向通信协议,WebSocket协议是双向通信协议;HTTP协议是无状态的,WebSocket协议是有状态的;HTTP协议通常用于短连接,而WebSocket协议则采用长连接方式;HTTP协议通常传输的是文本数据,如HTML、JSON等,而WebSocket协议可以传输任何类型的数据,包括文本和二进制数据。
本文仅是个人学习过程中的总结归纳,更详细内容请阅读相关文档。