当前位置: 首页 > news >正文

HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化

在这里插入图片描述

深入浅出:从头到尾全面解析HTTP协议

一、HTTP协议概述

1.1 HTTP协议简介

HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的通信协议之一。它用于客户端与服务器之间的数据传输,尤其是在Web浏览器和Web服务器之间。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会记住前一个请求的任何信息。HTTP协议常见于Web浏览、API交互、移动应用通信等场景。

1.2 HTTP的历史发展

HTTP协议的起源可以追溯到20世纪90年代,Tim Berners-Lee发明了万维网(World Wide Web),并设计了HTTP协议来进行信息交换。最初的HTTP/0.9只支持GET方法,功能非常简单。

  • HTTP/0.9:最初的HTTP版本,仅支持GET请求和HTML文档的传输。
  • HTTP/1.0:引入了请求头、响应头以及常用的HTTP方法(GET、POST等)。
  • HTTP/1.1:增加了持久连接、管道化、条件请求等功能,成为互联网应用的主流版本。
  • HTTP/2:基于Google的SPDY协议,解决了HTTP/1.x的多路复用和性能瓶颈。
  • HTTP/3:在HTTP/2的基础上使用QUIC协议进一步提升性能和安全性。

1.3 HTTP与HTTPS的区别

  • HTTP:超文本传输协议,数据在传输过程中不加密,容易受到中间人攻击(MITM),因此不适合处理敏感信息。
  • HTTPS:HTTP的安全版,通过SSL/TLS协议对数据进行加密,保证数据的机密性和完整性,广泛应用于银行、电商等需要保护用户隐私和交易安全的场景。

二、HTTP请求与响应结构详解

2.1 HTTP请求结构

HTTP请求是由请求行请求头空行请求体组成的。每一部分都扮演着不同的角色。

2.1.1 请求行(Request Line)

请求行包含三部分:

  • HTTP方法:如GET、POST、PUT、DELETE等,定义了客户端希望服务器执行的操作。
  • URL:即客户端请求的资源路径,通常包括协议、主机、路径和查询参数。
  • HTTP版本:例如HTTP/1.1HTTP/2,表示所使用的协议版本。

示例请求行

GET /api/user?id=123 HTTP/1.1
2.1.2 请求头(Request Headers)

请求头由多个键值对组成,向服务器传递请求的元数据。常见的请求头有:

  • Host:请求的主机名和端口。
  • User-Agent:客户端浏览器或应用程序的信息。
  • Accept:客户端支持的内容类型(例如text/htmlapplication/json)。
  • Authorization:身份验证信息。
  • Cookie:客户端发送的存储在浏览器中的cookie信息。

示例请求头

Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: application/json
Authorization: Bearer <token>
2.1.3 请求体(Request Body)

请求体用于提交数据,通常在POSTPUT请求中出现。常见的格式有application/jsonapplication/x-www-form-urlencoded

示例请求体

{"name": "JohnDoe","email": "john.doe@example.com"
}

2.2 HTTP响应结构

HTTP响应是由响应行响应头空行响应体组成的。

2.2.1 响应行(Response Line)

响应行包含三部分:

  • HTTP版本:例如HTTP/1.1HTTP/2,表示所使用的协议版本。
  • 状态码:表示请求的处理结果,分为5类(2xx表示成功,4xx表示客户端错误,5xx表示服务器错误等)。
  • 状态消息:对状态码的简短描述。

示例响应行

HTTP/1.1 200 OK
2.2.2 响应头(Response Headers)

响应头包含关于响应的数据,如服务器信息、缓存策略、内容类型等。常见的响应头包括:

  • Content-Type:响应体的内容类型(如text/htmlapplication/json)。
  • Content-Length:响应体的大小。
  • Cache-Control:控制缓存的行为。
  • Set-Cookie:服务器向客户端设置cookie。

示例响应头

Content-Type: application/json; charset=UTF-8
Content-Length: 123
Cache-Control: no-cache
2.2.3 响应体(Response Body)

响应体包含服务器返回的数据,通常是HTML页面、JSON格式数据、图片或其他媒体文件。响应体的内容由Content-Type决定。

示例响应体(JSON数据)

{"status": "success","data": {"user_id": 123,"name": "JohnDoe"}
}

三、HTTP状态码详解

HTTP状态码是服务器在响应客户端请求时返回的数字代码,表示请求的处理结果。状态码分为五类:

  • 1xx(信息性状态码):表示请求已接收,继续处理。

    • 100 Continue:继续请求,等待客户端发送请求体。
  • 2xx(成功状态码):表示请求成功。

    • 200 OK:请求成功,返回请求的资源。
    • 201 Created:请求成功,资源已经创建。
  • 3xx(重定向状态码):表示需要客户端进一步操作才能完成请求。

    • 301 Moved Permanently:资源永久移动到新位置。
    • 302 Found:资源临时移动到新位置。
  • 4xx(客户端错误状态码):表示请求有问题,客户端需要纠正。

    • 400 Bad Request:请求无效。
    • 404 Not Found:请求的资源不存在。
    • 401 Unauthorized:请求未通过身份验证。
  • 5xx(服务器错误状态码):表示服务器内部错误。

    • 500 Internal Server Error:服务器发生错误,无法完成请求。
    • 502 Bad Gateway:网关或代理服务器错误。
  • 四、常见HTTP方法详解

    HTTP协议定义了一系列方法,用于客户端和服务器之间的通信,不同方法的作用和使用场景各不相同。以下是常见HTTP方法的详细说明:

    4.1 GET:获取资源

    • 功能
      GET方法用于从服务器请求指定资源的数据。它是最常用的HTTP方法,通常用于读取数据或查询操作。
    • 特点:
      • GET请求是幂等的,即对同一资源的多次GET请求不会对服务器状态产生影响。
      • 数据通过URL的查询字符串(Query String)传递,限制了数据大小,且数据暴露在URL中,不适合传输敏感信息。
      • GET请求不会修改服务器上的数据。
    • 应用场景:
      • 获取网页内容。
      • 执行搜索功能,查询某些特定条件的结果。

    4.2 POST:提交数据

    • 功能
      POST方法用于将数据发送到服务器,通常用于创建新资源或提交表单数据。
    • 特点:
      • POST请求的主要作用是提交数据,数据通常包含在请求体中,不显示在URL中。
      • POST请求不是幂等的,多次发送同一请求可能会导致服务器状态发生变化(如重复创建资源)。
    • 应用场景:
      • 提交用户注册或登录表单。
      • 上传文件或发送数据到服务器。

    4.3 PUT:更新资源

    • 功能
      PUT方法用于更新服务器上指定的资源,将资源的全部内容替换为请求体中的数据。如果资源不存在,则可以选择创建资源。
    • 特点:
      • PUT请求是幂等的,发送多次请求的结果相同。
      • 适合用来执行全量更新操作。
    • 应用场景:
      • 更新用户信息(如替换一个用户的详细资料)。
      • 更新已有的文件或数据记录。

    4.4 DELETE:删除资源

    • 功能
      DELETE方法用于请求服务器删除指定的资源。
    • 特点:
      • DELETE请求是幂等的,多次发送同一请求的结果相同,即删除资源后,后续请求不会影响状态。
    • 应用场景:
      • 删除用户、文件、记录等具体资源。

    4.5 PATCH:部分更新资源

    • 功能
      PATCH方法用于对资源进行部分更新,只修改资源中的某些字段,而不是替换整个资源。
    • 特点:
      • PATCH请求不是幂等的,某些实现中,重复发送同一请求可能导致不同结果。
    • 应用场景:
      • 更新单个字段(如修改用户名或邮箱地址)。

    4.6 OPTIONS:获取支持的HTTP方法

    • 功能
      OPTIONS方法用于请求服务器返回某资源支持的HTTP方法列表。它通常用于客户端检查允许的操作。
    • 特点:
      • OPTIONS请求不会对资源或服务器状态产生影响。
      • 常用于CORS(跨域资源共享)的预检请求。
    • 应用场景:
      • 检查API接口支持的请求方法。

    4.7 HEAD:获取响应头

    • 功能
      HEAD方法和GET类似,但它只获取响应的头部信息,不返回响应体。它通常用于检查资源是否存在或了解资源的元信息。
    • 特点:
      • HEAD请求是幂等的。
      • 可用于节省带宽,因为它不会传输实际内容。
    • 应用场景:
      • 检查文件是否存在。
      • 获取文件的大小或上次修改时间。

    每种HTTP方法都有其独特的功能和应用场景,选择合适的方法有助于更清晰地表达客户端与服务器之间的意图,并提高API的设计规范性。例如,GET和HEAD适合只读操作,而POST和PUT则常用于创建和更新资源;DELETE和PATCH则分别用于删除和部分更新资源。通过合理使用这些HTTP方法,可以有效提升应用的可维护性和性能。

五、HTTP/1.1 与 HTTP/2 对比

HTTP/1.1和HTTP/2是互联网中使用的两种主要的HTTP协议版本。HTTP/2是对HTTP/1.1的重大升级,旨在解决HTTP/1.1的一些局限性,并提高Web性能和用户体验。

5.1 HTTP/1.1的局限性

  1. 队头阻塞
    HTTP/1.1的队头阻塞问题(Head-of-Line Blocking)是指在同一连接上,多个请求必须按顺序发送和接收。每个请求都需要等待前一个请求完成后才能开始处理。这种线性处理方式导致了延迟的增加,尤其是在需要加载大量资源的页面中表现得尤为明显。
  2. 头部冗余
    在HTTP/1.1中,每次请求都需要附带完整的头部信息,即使这些信息在多个请求中是相同的。这种重复传输的机制导致了带宽的浪费,尤其是在需要频繁请求相同资源的情况下,头部信息的冗余传输增加了网络负担。

5.2 HTTP/2的优势

  1. 二进制分帧
    HTTP/2采用二进制分帧层,将数据分为多个小块进行传输。这种方式不仅提高了传输效率,还避免了HTTP/1.1中的头部阻塞问题。二进制分帧使得协议更紧凑、更易于解析和处理,提高了数据传输的可靠性和速度。
  2. 多路复用
    HTTP/2允许在同一TCP连接上并发处理多个请求和响应,消除了HTTP/1.1中队头阻塞的问题。多路复用使得多个数据流可以同时进行,无需等待其他流完成,极大地提高了传输效率和页面加载速度。
  3. 头部压缩
    HTTP/2使用HPACK算法对HTTP头部进行压缩,减少了冗余数据的传输。HPACK通过维护头部字段的动态表和静态表,极大地减少了重复头部信息带来的带宽浪费,提高了传输效率。
  4. 服务器推送
    HTTP/2支持服务器推送功能,允许服务器在客户端请求之前主动将资源推送到客户端。这种机制可以减少延迟,因为客户端可以更早地接收到所需资源,从而加快页面加载速度。

5.3 HTTP/2的性能优化

HTTP/2通过其技术创新显著提高了数据传输效率,带来了以下性能优化:

  • 快速页面加载
    由于多路复用和服务器推送,HTTP/2能够显著加快Web页面的加载速度。客户端可以同时接收多个资源,而不必等待前一个资源加载完成,这对于现代Web应用需要加载大量静态资源的情况尤为重要。
  • 带宽利用率提升
    头部压缩和二进制分帧使得HTTP/2在带宽利用率方面有了显著提升。通过减少冗余数据和优化数据传输格式,HTTP/2能够在同样的带宽条件下传输更多有效数据。
  • 更好的用户体验
    HTTP/2的性能提升直接转化为更好的用户体验。页面加载更快,响应更及时,用户在浏览Web应用时的等待时间减少,整体体验更加流畅。

总之,HTTP/2通过解决HTTP/1.1的局限性和引入新的特性,极大地提升了Web的性能和用户体验。尤其是在现代Web应用中,HTTP/2的多路复用、头部压缩和服务器推送等特性,使得资源加载更加高效,页面响应更加迅速。

六、HTTP协议的安全性与HTTPS

6.1 HTTP的安全性问题

HTTP(超文本传输协议)是一种明文传输的协议,这意味着数据在客户端与服务器之间传输时,未经加密,任何网络中间设备(如路由器、交换机、代理服务器等)都可以直接读取和篡改数据。由于HTTP缺乏加密和身份验证机制,它面临以下主要安全风险:

  1. 中间人攻击(MITM,Man-in-the-Middle Attack)
    在中间人攻击中,攻击者通过截获并篡改客户端和服务器之间的通信内容,伪装成合法的通信方,窃取敏感信息或向客户端/服务器发送恶意数据。由于HTTP没有加密和身份验证,攻击者可以轻松地篡改数据或窃听传输内容。
  2. 数据嗅探
    因为HTTP数据是以明文形式传输的,任何处于同一网络环境中的攻击者都可以通过网络嗅探工具(如Wireshark)捕获和查看传输的内容。尤其是在公共Wi-Fi或其他不安全的网络中,攻击者可以轻易地获取用户输入的敏感数据,如登录凭证、信用卡号、个人身份信息等。
  3. 数据篡改
    在HTTP连接中,由于没有数据完整性校验机制,传输过程中的数据很容易遭到篡改。攻击者可以修改、插入、删除传输中的数据,使得接收方收到的内容不再是发送方原本意图传输的数据,造成信息泄露或损坏。

因此,当涉及到敏感信息,如账户密码、支付信息、个人身份资料等时,使用HTTP协议是非常不安全的,因为它无法提供任何的加密保护和身份验证。

6.2 HTTPS的优势

HTTPS(HyperText Transfer Protocol Secure,安全超文本传输协议)是对HTTP的加密扩展,它通过SSL/TLS协议为传输的数据提供加密保护,解决了HTTP的安全问题。HTTPS可以保证数据在传输过程中的机密性、完整性和身份验证,具体表现在以下几个方面:

  1. 数据加密
    HTTPS通过使用SSL/TLS协议对数据进行加密,确保传输中的数据无法被第三方窃听。即使攻击者拦截了数据包,由于数据已被加密,没有密钥的情况下是无法解密的。这一加密过程使用了公钥加密和对称加密的结合,确保数据在传输中的保密性,防止敏感信息(如用户名、密码、信用卡号等)被泄露。
  2. 身份验证
    HTTPS通过数字证书(SSL证书)验证服务器的身份。在建立HTTPS连接之前,服务器会向客户端提供一个由可信证书颁发机构(CA)签发的数字证书。该证书包含了服务器的公钥以及由证书颁发机构签名的信息。客户端可以通过验证证书是否有效来确认服务器的真实身份,从而避免伪装成合法站点的攻击(如“钓鱼攻击”)。只有当证书验证通过时,客户端才会与服务器建立安全的加密连接。
  3. 数据完整性
    HTTPS协议通过使用消息认证码(MAC)和哈希算法确保传输数据的完整性。这意味着在数据传输过程中,任何尝试修改或篡改数据的行为都会被检测到。如果数据在传输过程中被篡改,接收方将发现校验值不匹配,从而避免篡改后的数据被接受。通过这种方式,HTTPS有效防止了数据丢失或被恶意篡改的风险,保证了数据的完整性和真实性。

此外,HTTPS协议还可以有效抵御“重放攻击”,即攻击者通过捕获并重发合法请求来干扰数据传输。由于每次连接建立时都进行密钥交换和加密,攻击者无法简单地重新发送截获的数据。

​ HTTP由于缺乏加密机制和身份验证,容易受到各种安全攻击,尤其是在处理敏感信息时极为不安全。而HTTPS通过使用SSL/TLS协议提供了端到端的加密,确保了数据传输的机密性、完整性,并通过数字证书验证身份,防止伪造网站的攻击。因此,HTTPS是当今互联网中保护用户隐私和数据安全的标准协议,是大多数网站和在线服务不可或缺的一部分。

七、HTTP/3:下一代协议

HTTP/3是基于Google的QUIC(Quick UDP Internet Connections)协议开发的,旨在进一步提升HTTP协议的性能和安全性。与HTTP/2不同,HTTP/3不再依赖于传统的TCP协议,而是基于UDP协议,这一变化带来了许多潜在的优势,尤其是在网络延迟、丢包处理和连接恢复方面。

7.1 HTTP/3的优势

  1. 低延迟
    QUIC协议通过减少连接建立的时间,从而显著降低延迟。在传统的TCP连接中,客户端和服务器之间需要经过三次握手才能建立连接,而在QUIC中,由于采用了0-RTT(零往返时间)连接建立机制,客户端可以在首次连接时立即开始数据传输,从而减少了等待时间。此外,QUIC在处理数据传输时还支持0-RTT的数据发送,使得即使是在重复连接的情况下,数据传输也能更加高效。
  2. 抗网络抖动和丢包
    QUIC协议的多路复用机制和流控算法使得HTTP/3在不稳定的网络环境中具有更强的适应性。具体而言,QUIC使用基于UDP的传输层,可以独立地重传丢失的数据包,而不会影响到其他数据流的传输。这意味着即便在存在丢包的情况下,HTTP/3的性能依然能够得到保障。此外,QUIC采用了高级的流控制算法,可以动态调整数据传输的速率,避免因网络不稳定而产生大规模的丢包。
  3. 更高的安全性
    HTTP/3内建了强大的加密功能,所有的数据传输都采用TLS 1.3协议进行加密,这比HTTP/2使用的TLS 1.2要更为安全。此外,由于QUIC的设计本身就集成了加密功能,相比于TCP协议需要在应用层加密,HTTP/3提供了更低的加密延迟和更高的安全性。

7.2 HTTP/3的应用场景

  1. 高延迟和丢包率较高的网络环境
    HTTP/3特别适用于高延迟和丢包率较高的网络环境。例如,在移动网络(如4G、5G)和低质量Wi-Fi环境中,由于这些网络条件通常存在较高的丢包率和延迟,传统的TCP协议可能会导致性能下降。而HTTP/3通过其改进的传输机制,能够有效缓解这些问题,确保更加稳定和快速的数据传输。
  2. 移动设备和异构网络环境
    在移动设备广泛使用的今天,网络环境变得更加多样化且充满挑战。移动设备在不同的基站之间切换、连接到不同Wi-Fi热点等情况下,可能会经历频繁的网络断开和重新连接。HTTP/3的0-RTT连接建立和快速恢复机制,使得它在这种频繁变动的网络环境中能够提供更好的性能。
  3. 视频流、实时通信等延迟敏感型应用
    对于视频流、在线游戏、实时语音通话等对延迟非常敏感的应用,HTTP/3能够提供更加流畅的体验。由于其低延迟和高吞吐量的特性,能够减少数据传输过程中的卡顿和延迟,从而提升用户体验,特别是在不稳定网络环境下表现更为突出。

总的来说,HTTP/3的应用场景主要集中在网络不稳定或高延迟的环境中,通过优化的连接建立、流控制和丢包恢复机制,能够显著提升现代互联网应用的性能和用户体验。


八、HTTP协议在现代Web中的应用

8.1 HTTP在Web浏览中的应用

在Web浏览过程中,HTTP是客户端和服务器之间通信的基础。每次浏览器访问一个网站,都会发起HTTP请求,获取Web页面及其资源(如CSS、JavaScript文件、图片等)。HTTP协议保证了请求和响应的顺利传输,在其中,浏览器通过GET请求从服务器获取页面内容,并通过POST请求提交表单数据。

8.2 API通信中的HTTP应用

随着Web API的流行,HTTP协议成为现代Web应用中不可或缺的一部分。RESTful API通常使用HTTP方法(如GET、POST、PUT、DELETE等)来定义不同的操作,客户端通过HTTP请求访问API端点,获取或提交数据。HTTP在API通信中提供了简洁、灵活且高效的方式来实现不同服务之间的数据交互。

8.3 移动应用与HTTP协议

移动应用也广泛使用HTTP协议与后台服务器进行通信。尤其是对于需要实时数据更新的应用(如社交媒体、天气预报等),HTTP协议能够高效地传输数据,并配合JSON、XML等数据格式进行高效解析。移动应用还可以使用HTTPS协议来保证数据的安全性,尤其是在传输敏感信息时。

8.4 HTTP与云计算和微服务架构

在云计算和微服务架构中,服务之间的通信通常使用HTTP协议进行。微服务通常暴露RESTful API,通过HTTP协议相互交互和调用。由于HTTP协议的广泛性和灵活性,它成为了云计算平台和微服务架构中最常见的通信方式,帮助不同的服务实现松耦合和高效的数据交换。

结语

HTTP协议作为Web通信的基石,经历了多年的发展与演变。从最初简单的HTTP/0.9到如今功能强大的HTTP/3,HTTP协议不断适应互联网的发展需求。了解HTTP的工作原理及其发展历程,对每一个Web开发者和网络工程师来说都是非常重要的。

希望本文能够帮助你深入理解HTTP协议的各个方面,助力你的学习与工作。如果你对本文内容有任何疑问或需要进一步讨论,欢迎在评论区留言。
在这里插入图片描述

相关文章:

HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化

深入浅出&#xff1a;从头到尾全面解析HTTP协议 一、HTTP协议概述 1.1 HTTP协议简介 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的通信协议之一。它用于客户端与服务器之间的数据传输&#xff0c;尤其是在Web…...

张量并行和流水线并行在Transformer中的具体部位

目录 张量并行和流水线并行在Transformer中的具体部位 一、张量并行 二、流水线并行 张量并行和流水线并行在Transformer中的具体部位 张量并行和流水线并行是Transformer模型中用于提高训练效率的两种并行策略。它们分别作用于模型的不同部位,以下是对这两种并行的具体说…...

WEB开发: 丢掉包袱,拥抱ASP.NET CORE!

今天的 Web 开发可以说进入了一个全新的时代&#xff0c;前后端分离、云原生、微服务等等一系列现代技术架构应运而生。在这个背景下&#xff0c;作为开发者&#xff0c;你一定希望找到一个高效、灵活、易于扩展且具有良好性能的框架。那么&#xff0c;ASP.NET Core 显然是一个…...

【论文阅读】Federated learning backdoor attack detection with persistence diagram

目的&#xff1a;检测联邦学习环境下&#xff0c;上传上来的模型是不是恶意的。 1、将一个模型转换为|L|个PD,&#xff08;其中|L|为层数&#xff09; 如何将每一层转换成一个PD&#xff1f; 为了评估第&#x1d457;层的激活值&#xff0c;我们需要&#x1d450;个输入来获…...

Gooxi Eagle Stream 2U双路通用服务器:性能强劲 灵活扩展 稳定易用

人工智能的高速发展开启了飞轮效应&#xff0c;实施数字化变革成为了企业的一道“抢答题”和“必答题”&#xff0c;而数据已成为现代企业的命脉。以HPC和AI为代表的新业务就像节节攀高的树梢&#xff0c;象征着业务创新和企业成长。但在树梢之下&#xff0c;真正让企业保持成长…...

【计算机网络】实验2:总线型以太网的特性

实验 2&#xff1a;总线型以太网的特性 一、 实验目的 加深对MAC地址&#xff0c;IP地址&#xff0c;ARP协议的理解。 了解总线型以太网的特性&#xff08;广播&#xff0c;竞争总线&#xff0c;冲突&#xff09;。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实…...

如何在Spark中使用gbdt模型分布式预测

这目录 1 训练gbdt模型2 第三方包python环境打包3 Spark中使用gbdt模型3.1 spark配置文件3.2 主函数main.py 4 spark任务提交 1 训练gbdt模型 我们可以基于lightgbm快速的训练一个gbdt模型&#xff0c;训练相对比较简单&#xff0c;只要把训练样本处理好&#xff0c;几行代码可…...

Qt-5.14.2 example

官方历程很丰富&#xff0c;modbus、串口、chart图表、3D、视频 共享方便使用 Building and Running an Example You can test that your Qt installation is successful by opening an existing example application project. To run an example application on an Android …...

virtualbox给Ubuntu22创建共享文件夹

1.在windows上的操作&#xff0c;创建共享文件夹Share 2.Ubuntu22上的操作&#xff0c;创建共享文件夹LinuxShare 3.在virtualbox虚拟机设置里&#xff0c;设置共享文件夹 共享文件夹路径&#xff1a;选择Windows系统中你需要共享的文件夹 共享文件夹名称&#xff1a;挂载至wi…...

GPT打字机效果—— fetchEventSouce进行sse流式请求

EventStream基本用法 与 WebSocket 不同的是&#xff0c;服务器发送事件是单向的。数据消息只能从服务端到发送到客户端&#xff08;如用户的浏览器&#xff09;。这使其成为不需要从客户端往服务器发送消息的情况下的最佳选择。 const evtSource new EventSource(“/api/v1/…...

SpringBoot 在线家具商城:设计考量与实现细节聚焦

第4章 系统设计 市面上设计比较好的系统都有一个共同特征&#xff0c;就是主题鲜明突出。通过对页面简洁清晰的布局&#xff0c;让页面的内容&#xff0c;包括文字语言&#xff0c;或者视频图片等元素可以清晰表达出系统的主题。让来访用户无需花费过多精力和时间找寻需要的内容…...

每日速记10道java面试题07

其他资料&#xff1a; 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 目录 1.线程的生命周期在j…...

前端面试热门题(二)[html\css\js\node\vue)

Vue 性能优化的方法 Vue 性能优化的方法多种多样&#xff0c;以下是一些常用的策略&#xff1a; 使用v-show替换v-if&#xff1a;v-show是通过CSS控制元素的显示与隐藏&#xff0c;而v-if是通过操作DOM来控制元素的显示与隐藏&#xff0c;频繁操作DOM会导致性能下降。因此&am…...

mvc基础及搭建一个静态网站

mvc asp.net core mvc环境 .net8vscode * Asp.Net Core 基础* .net8* 前辈* .net 4.9 非跨平台版本 VC* 跨平台版本* 1.0* 2.0* 2.1* 3.1* 5* 语言* C#* F# * Visual Basic* 框架* web应用* asp应用* WebFrom* mvc应用* 桌面应用* Winform* WPF* Web Api api应用或者叫服务* …...

AOSP的同步问题

repo sync同步时提示出错: error: .repo/manifests/: contains uncommitted changesRepo command failed due to the following UpdateManifestError errors: contains uncommitted changes解决方法&#xff1a; 1、cd 进入.repo/manifests cd .repo/manifests2、执行如下三…...

HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能

文章目录 1、案例效果2、案例实现1、代码实现2、代码解释4、总结1、案例效果 2、案例实现 1、代码实现 代码如下(示例): import router from @ohos.router import {ResizeDirection } from @ohos.UiTest import curves...

Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)

Logistic Regression&#xff08;逻辑回归&#xff09;、Maximum Likelihood Estimatio&#xff08;最大似然估计&#xff09; 逻辑回归&#xff08;Logistic Regression&#xff0c;LR&#xff09;逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…...

Vue文字转语音实现

在开发流程中&#xff0c;面对语音支持的需求&#xff0c;小规模语音内容或许可以通过预处理后播放来轻松应对&#xff0c;但当涉及大量语音时&#xff0c;这一方法就显得繁琐低效了。为此&#xff0c;智慧的开发者们总能找到便捷的解决方案——利用Web技术实现语音播放&#x…...

Docker快速部署RabbitMq

在外网服务器拉取镜像 docker pull arm64v8/rabbitmq:3.8.9-management或者拉去我的服务器的 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_rabbitmq:3.8.9-management重新命名 docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/lin…...

glog在vs2022 hello world中使用

准备工作 设置dns为阿里云dns 223.5.5.5&#xff0c;下载cmake&#xff0c;vs2022&#xff0c;git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…...

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布&#xff01;Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新&#xff0c;简化了…...

CentOS使用chrony服务进行时间同步源设置脚本

CentOS使用chrony服务进行时间同步源设置脚本 #!/bin/bash# Created: 2024-11-26 # Function: Check and Set OS time sync source to 10.0.11.100 # FileName: centos_set_time_source_to_ad.sh # Creator: Anster # Usage: # curl http://webserver-ip/scripts/centos_set…...

Git仓库迁移到远程仓库(源码、分支、提交)

单个迁移仓库 一、迁移仓库 1.准备工作 > 手动在电脑创建一个临时文件夹&#xff0c;CMD进入该目录 > 远程仓库上创建一个同名的空仓库 2.CMD命令&#xff1a;拉取旧Git仓库&#xff08;包含提交、分支、源码&#xff09; $ git clone --bare http://git.domain.cn/…...

【算法刷题指南】优先级队列

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…...

使用pymupdf提取PDF文档中的文字和其颜色

最近我在捣鼓一个PDF文件&#xff0c;想把它里面的文字和文字颜色给提取出来。后来发现有个叫pymupdf的库能搞定这事儿。操作起来挺简单的&#xff0c;pymupdf的示例文档里就有现成的代码可以参考。 how-to-extract-text-with-color 我本地的测试代码如下&#xff1a; impor…...

贪心算法题

0简介 0.1什么是贪心算法 贪心算法是用贪婪(鼠目寸光)的角度&#xff0c;找到解决问题的最优解 贪心策略&#xff1a;(从局部最优 --> 整体最优) 1把解决问题的过程分为若干步&#xff1b; 2解决每一个问题时&#xff0c;都选择当前“看上去”最优的解法&#xff1b; 3“…...

Python 3 教程第33篇(MySQL - mysql-connector 驱动)

Python MySQL - mysql-connector 驱动 MySQL 是最流行的关系型数据库管理系统&#xff0c;如果你不熟悉 MySQL&#xff0c;可以阅读我们的 MySQL 教程。 本章节我们为大家介绍使用 mysql-connector 来连接使用 MySQL&#xff0c; mysql-connector 是 MySQL 官方提供的驱动器。…...

23种设计模式之外观模式

目录 1. 简介2. 代码2.1 SelectFoodService (选择食品)2.2 PayService (支付服务)2.3 TakeService (制作服务)2.4 OrderService (下单服务)2.5 Food (食品)2.6 TackingSystem &#xff08;外观类&#xff09;2.7 Test &#xff08;测试类&#xff09; 3. 优缺点3. 总结 1. 简介…...

GateWay使用手册

好的&#xff0c;下面是优化后的版本。为了提高可读性和规范性&#xff0c;我对内容进行了结构化、简化了部分代码&#xff0c;同时增加了注释说明&#xff0c;便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependencies><!-- Spring Cloud Gate…...

MySQL1.0

1.数据库的三大范式 范式是为了使数据库设计更加合理&#xff0c;规范&#xff0c;减少数据冗余和数据不一致等问题指定的一系列规则。 第一范式&#xff1a;第一范式要求数据表中的每一列都是不可分割的原子数据项。例如&#xff1a;有一个学生信息表&#xff0c;包含 “学生…...