一、什么是http协议
1.http协议概念
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个应用层协议,用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
2.http/0.9
HTTP 协议的第一个版本只有一个方法,即 GET,它会从服务器请求页面,不支持请求头,主要用于传输纯文本内容。在此 Prortocol 中,连接在单个请求/响应对之后关闭。
3.http/1.0
HTTP1.0则新增了POST、HEAD请求方式 ,并支持根据content-type选择多种数据格式,如视频、音频和图片等。此外,HTTP1.0还引入了状态码和缓存功能 ,使得在一定时间内访问同一网站可以直接访问缓存。然而,HTTP1.0使用的是非持久连接,即每次TCP连接后只能发送一个请求,服务器响应后就会关闭连接。
4.http/1.1
HTTP/1.1新增了OPTIONS、PUT、DELETE、TRACE和CONNECT等请求方式 。HTTP1.1默认使用持久连接,使得一个连接中可以传输多个对象,无需为每个Web对象的传送建立新的连接。这一特性减少了建立和关闭连接的消耗和延迟,提高了性能。此外,HTTP1.1还提供了范围请求功能,允许客户端请求资源的某个部分,而不是整个资源,这有助于优化带宽使用。
5.http/2
首先,HTTP/2引入了多路复用的特性,这意味着在单个连接中,可以并行处理多个请求和响应,无需等待前一个请求完成。每个请求都有一个唯一的ID,服务器可以根据这个ID将响应正确地发送回客户端。这种多路复用的方式极大地提高了传输效率,减少了延迟。
HTTP/2还采用了头部压缩技术。在HTTP1.x中,头部信息往往包含大量重复的内容,这导致了不必要的带宽浪费。而HTTP/2使用编码技术来压缩头部信息,并在两端维护一个头部信息的索引表,以消除重复内容,进一步减少了传输开销。
HTTP/2还新增了服务器推送功能。当服务器检测到客户端需要某些资源时,它可以主动将这些资源推送到客户端,而无需客户端再次发送请求。这种方式特别适合加载静态资源,可以显著提高加载速度。
HTTP/2支持通过HTTPS进行加密传输,确保了数据的安全性。
需要注意的是,尽管HTTP/2在多个方面都有显著的优势,但它并不是完全取代HTTP1.1的。在实际应用中,HTTP/2和HTTP1.1可能会并存一段时间,具体使用哪种协议取决于具体的场景和需求。
6.http/3
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等,为开发者提供了更加便捷和统一的网络解决方案。
7.https
HTTPS(Secure HTTP)是一种安全的超文本传输协议,它是在HTTP的基础上加入了SSL/TLS协议 ,从而实现了对数据的加密传输 和身份验证。
HTTPS的出现主要是为了解决HTTP协议在数据传输过程中的安全性问题:
- 数据暴露风险:明文传输意味着HTTP协议中的报文(尤其是header部分)是以简单可阅读的文本形式进行传输的。这意味着在传输过程中,任何能够截获数据的中间节点,如代理服务器、路由器、Wi-Fi热点或通信服务运营商,都可以轻易地查看和解析这些数据。这可能导致用户的搜索内容、隐私信息,甚至网页内容被窃取或篡改。
- 流量劫持问题:由于数据是明文传输的,搜索引擎和各大站点容易受到流量劫持的困扰。例如,搜索结果页可能被篡改,或者返回的内容中强行插入弹窗或嵌入式广告。这不仅导致推广流量的流失,还可能损害品牌的可信度和信誉。
- 安全隐患:明文传输使得HTTP协议不具备给通讯内容加密的功能,所有的请求和响应内容都是可见的。这增加了数据被窃取或篡改的风险,尤其对于涉及用户隐私和敏感数据的场景,如网上银行信息、企业机密信息等,一旦被不法分子利用,可能产生严重的后果。
8.在浏览器中输入一个url后发生了什么
- 用户在浏览器中输入网址:当用户在浏览器的地址栏中输入一个网址并按下回车键时,浏览器会开始处理这个请求。
- 浏览器解析URL:浏览器会解析输入的URL,从中提取出协议(如http或https)、域名(或IP地址)、端口号(如果有的话)以及路径和查询参数等信息。
- DNS解析:浏览器会查询本地缓存或向DNS服务器发送请求,以获取与域名对应的IP地址。DNS解析是将域名转换为IP地址的过程,这样浏览器才能知道如何与服务器建立连接。
- 建立TCP连接:一旦获得IP地址,浏览器会尝试与服务器建立TCP连接。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,用于在源主机和目的主机之间建立可靠的、面向连接的字节流通道。
- 发送HTTP请求:连接建立后,浏览器会构建一个HTTP请求报文,并将其发送给服务器。HTTP请求报文包括请求行(包含请求方法、URL和协议版本)、请求头部(包含一些元数据和附加信息)以及请求正文(如果有的话,比如POST请求的数据)。
- 服务器处理请求:服务器接收到HTTP请求后,会解析请求报文,并根据请求的内容执行相应的操作。这可能包括读取数据库、处理表单数据、执行代码等。
- 服务器发送HTTP响应:服务器处理完请求后,会构建一个HTTP响应报文,并将其发送回浏览器。HTTP响应报文包括状态行(包含状态码和状态消息)、响应头部以及响应正文(包含服务器返回的数据)。
- 浏览器解析和渲染响应内容:浏览器接收到HTTP响应后,会解析响应报文,并提取出响应正文中的数据。然后,浏览器会根据响应内容的类型(如HTML、CSS、JavaScript等)进行相应的处理,最终将页面渲染在屏幕上。
二、什么是websocket协议
1.websocket协议概念
WebSocket协议是一种基于TCP的应用层协议 ,它允许在客户端和服务器之间建立持久连接 ,实现双向通信。这种协议的设计初衷是为了解决HTTP/1.x协议在Web应用中无法实现服务器主动向客户端推送消息的问题。
WebSocket通过HTTP协议进行握手以建立连接,但一旦连接建立,通信就不再依赖于HTTP。这意味着WebSocket连接可以保持打开状态,允许服务器主动发送信息给客户端,而无需客户端定期轮询服务器以获取更新。这种全双工通信方式显著提高了实时性,降低了延迟,并减少了不必要的资源消耗。
WebSocket协议具有以下特点:
- 节省资源开销:与HTTP请求相比,WebSocket在通信过程中减少了携带完整头部信息的开销。
- 实时性更强:由于支持全双工通信,服务器可以主动推送数据给客户端,减少了等待客户端发起请求的时间延迟。
- 保持连接状态:WebSocket连接建立后可以一直保持打开状态,能够记录用户状态,通信时可以省略部分状态信息。
- 更好的二进制支持:WebSocket定义了二进制帧,相比HTTP协议,它可以更轻松地处理二进制内容。
WebSocket协议广泛应用于需要实时通信的Web应用,如在线聊天、实时股票行情、多人在线游戏等场景。通过使用WebSocket,这些应用可以实现更高效、更流畅的通信体验。
2.心跳机制
WebSocket的心跳机制是确保客户端和服务器之间长连接稳定性的关键措施。它的基本思想是定期在连接上发送小型数据包,这些数据包通常被称为"心跳包",以维持连接的活跃状态。
服务端需要定期发送心跳包给客户端,而客户端在收到心跳包后需要回复确认消息。这样,双方都能确认对方是否仍然在线。
3.websocket与sse(Server-Sent Events)的区别
SSE(Server-Sent Events)的主要作用是允许服务器通过单个HTTP连接将实时事件流式传输到客户端。这使得服务器能够主动向客户端推送实时数据更新,而无需客户端主动发起请求。WebSocket和SSE都用于实现实时通信,允许服务器向客户端推送实时更新的信息,无需客户端定期轮询服务器。同样是用于实时通信,它们有着以下区别,在使用中酌情使用:
- 通信方式 :
- WebSocket:是一个全双工通道,支持双向通信。客户端和服务器都可以主动发送消息给对方,提供了更高的灵活性和交互性。
- SSE:是单向通道,只允许服务器向客户端发送消息。这种单向通信模式在某些只需要服务器推送更新的场景下是足够的,但不适用于需要客户端向服务器发送消息的情况。
- 协议支持 :
- WebSocket:是一个独立的协议,需要服务器端支持。它提供了更底层的通信机制,可以传输任何类型的数据,包括文本和二进制数据。
- SSE:部署在HTTP协议之上,利用了HTTP的长连接特性。由于它基于现有的HTTP协议,因此更容易与现有的Web基础设施集成。
- 复杂性和部署难度 :
- WebSocket:相对复杂,需要更多的配置和部署工作。由于它是一个独立的协议,可能需要对现有的服务器进行额外的调整或更新。
- SSE:相对简单和轻量级。由于它基于HTTP协议,现有的服务器软件一般都支持SSE,因此在部署上更为简单。
- 默认功能 :
- SSE:默认支持断线重连功能,即在网络连接中断时,客户端可以自动重新建立连接并继续接收服务器发送的消息。
- WebSocket:则需要额外的部署和配置才能实现断线重连功能。
- 数据类型支持 :
- WebSocket:默认支持传送二进制数据,适用于需要传输复杂数据结构的场景。
- SSE:一般只用来传送文本数据,如果需要传输二进制数据,则需要进行编码转换。
- 安全性 :
- SSE:不支持CORS(跨源资源共享),这意味着服务器和客户端必须在同一网域内,且协议和端口也必须相同。这可能会在某些跨域通信的场景下造成限制。
- WebSocket:则不受此限制,可以在不同网域之间进行通信。
三、总结
http与websocket是应用层两种不同的协议,HTTP协议是单向通信协议,WebSocket协议是双向通信协议;HTTP协议是无状态的,WebSocket协议是有状态的;HTTP协议通常用于短连接,而WebSocket协议则采用长连接方式;HTTP协议通常传输的是文本数据,如HTML、JSON等,而WebSocket协议可以传输任何类型的数据,包括文本和二进制数据。
本文仅是个人学习过程中的总结归纳,更详细内容请阅读相关文档。