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

WebSocket协议解析

文章目录

  • 一、HTTP协议与HTTPS协议
    • 1.HTTP协议的用处
    • 2.HTTP协议的特点
    • 3.HTTP协议的工作流程
    • 4.HTTPS协议的用处
    • 5.HTTPS协议的特点
    • 6.HTTPS协议的工作流程
  • 二、WebSocket协议出现的原因
      • 1. 传统的HTTP请求-响应模型
      • 2. 轮询(Polling)
      • 3. 长轮询(Long Polling)
      • 4. Server-Sent Events (SSE)
      • 5. WebSocket
  • 三、WebSocket协议解析
    • 1.特点
    • 2.建立连接和数据通信
      • 第一步: 客户端发起HTTP请求
      • 第二步: 服务器响应
      • 第三步: 握手完成
      • 第四步: 数据传输
      • 掩码操作示例
      • 第五步: 连接关闭

一、HTTP协议与HTTPS协议

1.HTTP协议的用处

HTTP (Hypertext Transfer Protocol, 超文本传输协议) 是一种用于从网络服务器传输超文本到本地浏览器的传输协议。它确保了高效且准确的信息传输,并定义了在数据通信过程中客户端与服务器之间的交互行为。

  • Web浏览: 当用户在浏览器地址栏输入网址或点击链接时,客户端向服务器发送一个HTTP请求以获取资源。服务器响应这些请求并返回HTML页面,浏览器再将这些页面渲染成可视化的网页。
  • 数据交换: HTTP支持多种数据类型的传输,包括但不限于图像、视频、文本和其他多媒体内容。这使得Web应用程序能够提供丰富的用户体验。

2.HTTP协议的特点

  • 无状态协议: HTTP是一种无状态协议,意味着每次连接只处理一个请求,服务器不会保留关于客户端的任何状态信息。这种设计简化了服务器的实现,但也可能导致一些需要维护状态的应用程序需要使用cookies或session来跟踪用户会话。
  • 灵活: HTTP允许传输任意类型的数据对象,并且可以通过不同的MIME类型来标识数据格式。
  • 简单快速: HTTP请求方法简洁明了,服务器通常能够迅速响应这些请求。
  • 基于文本: 所有命令和消息都是纯文本形式,易于调试和理解。

3.HTTP协议的工作流程

  • HTTP协议是基于TCP/IP模型的应用层协议:

在这里插入图片描述

一个典型的HTTP请求由以下几个部分组成:

  • 请求行: 包含请求的方法(GET、POST等)、请求的URL和使用的HTTP版本。
  • 请求头: 包含客户端信息、认证信息以及其他用于控制请求行为的元数据。
  • 空行: 分隔请求头和请求体。
  • 请求体: 可选部分,包含了请求的数据,例如表单提交的数据。

HTTP响应同样也包含以下几个部分:

  • 状态行: 包含HTTP版本、状态码及描述该状态码的文字说明。
  • 响应头: 包含服务器信息、认证信息及其他控制响应行为的元数据。
  • 空行: 分隔响应头和响应体。
  • 响应体: 包含了服务器响应的数据,如HTML文档或其他类型的文件。

  • 用户从在浏览器输入url请求资源,到获得资源并渲染在页面上的完整流程:
  1. URL 解析和域名解析

    • 用户在浏览器地址栏输入URL。
    • 浏览器解析URL,提取协议、主机名、端口(如未指定则使用默认端口)、路径和查询字符串。
    • 浏览器进行域名系统(DNS)查找,将域名转换为对应的IP地址。
  2. 建立TCP连接

    • 浏览器与服务器建立TCP连接,这涉及到三次握手过程。
  3. 发起HTTP请求

    • 若URL使用HTTP协议,浏览器会直接发送HTTP请求。
    • 若URL使用HTTPS协议,浏览器会先与服务器建立安全连接,包括SSL/TLS握手,然后加密的HTTP请求通过该安全连接传输。
  4. 服务器处理请求

    • 服务器接收到请求后,根据请求的资源类型和路径等信息处理请求。
    • 如果请求的是静态资源(如HTML、CSS、JavaScript文件),服务器会直接从文件系统中读取并返回。
    • 如果请求的是动态资源,服务器可能需要运行相关的应用程序或脚本来生成响应内容。
  5. 返回HTTP响应

    • 服务器将请求的资源或生成的页面作为HTTP响应返回给客户端。
    • HTTP响应包含状态码、响应头和响应体。
  6. 浏览器处理响应

    • 浏览器解析响应,根据状态码确认是否成功获取资源。
    • 对于HTML文档,浏览器开始解析HTML并构建DOM(文档对象模型)。
    • 遇到链接到外部资源(如CSS、JavaScript、图片等)的标签,浏览器会再次发起请求下载这些资源。
  7. 渲染页面

    • 浏览器根据DOM和CSSOM(CSS对象模型)渲染页面,这是渲染引擎的工作。
    • JavaScript文件被执行,可能会对页面内容和结构进行动态修改。
  8. 显示结果

    • 浏览器在解析完HTML、CSS和执行完JavaScript后,将最终的页面呈现给用户。
  9. 关闭连接

    • 一旦页面渲染完毕,浏览器通常会关闭与服务器的TCP连接,但在持久连接(keep-alive)的情况下,此连接可能会保持打开状态以供后续请求使用。

整个过程涉及网络通信、协议解析、安全加密、数据处理和页面渲染等多个环节,每个环节都对网页加载性能有重要影响。

在这里插入图片描述

4.HTTPS协议的用处

HTTPS (Hypertext Transfer Protocol Secure) 是HTTP的安全版本,它在HTTP的基础上加入了SSL/TLS层,主要用于需要高度安全性的网站,比如银行、电子商务网站等,以确保用户的信息安全。

  • 加密通信: 使用SSL/TLS协议对数据进行加密,以防止数据在传输过程中被截获或监听。
  • 身份验证: 通过数字证书验证服务器的身份,确保用户访问的是合法的网站,从而防止中间人攻击。
  • 数据完整性: 保证数据在传输过程中的完整性和未被篡改。

5.HTTPS协议的特点

  • 安全性: 通过加密技术来保护传输的数据,防止数据被窃取或篡改。
  • 认证: 通过数字证书来验证通信双方的身份,确保其真实性。
  • 可靠性: 提供数据的完整性校验,确保接收到的信息是完整无误的。

6.HTTPS协议的工作流程

HTTPS在HTTP的基础上通过SSL或TLS进行加密处理。

在这里插入图片描述

SSL/TLS协议在传输数据之前,会先在客户端和服务器之间建立一条加密通道。

  • HTTPS通过以下步骤确保安全通信:
  1. 客户端发起TCP连接请求;
  2. 服务器响应TCP连接;
  3. 客户端和服务器进行SSL/TLS握手:
    • 客户端向服务器发送“Client Hello”消息,其中包含客户端支持的SSL/TLS版本和加密套件列表。
    • 服务器选择一个加密套件,并发送“Server Hello”消息,确认所选的加密套件,并附带自己的数字证书。
    • 客户端验证服务器的数字证书,并生成一个随机数作为会话密钥,然后使用服务器公钥加密此会话密钥后发送给服务器。
    • 服务器解密会话密钥,并确认密钥已接收。
  4. 握手成功后,加密的HTTP数据传输开始;
  5. 通讯完成后,断开连接。

总之,HTTP和HTTPS构成了互联网通信的基础,而随着网络安全意识的提高,HTTPS正逐步取代传统的HTTP成为主流的网络通信协议,为用户提供更安全的网络环境。

二、WebSocket协议出现的原因

WebSocket技术的出现主要是为了解决传统HTTP协议在实现实时双向通信方面存在的不足,提高通信效率并简化应用开发。

  • 克服HTTP轮询的局限性:
    传统HTTP协议下的轮询机制要求浏览器定期向服务器发起HTTP请求以获取更新,这种方式不仅效率低下,而且消耗大量带宽资源。
    HTTP请求头部较长,而实际传输的有效数据往往较少,导致资源浪费严重。

  • 实现实时双向通信的需求:
    随着互联网应用的发展,对于即时消息、在线游戏等需要实时双向通信的应用场景越来越多。
    传统HTTP协议无法满足服务器主动向客户端推送数据的需求,限制了这类应用的实现。

  • 提高通信效率:
    WebSocket协议仅需一次握手即可建立持久连接,之后客户端与服务器之间可以直接进行高效的数据交换。
    这种全双工(full-duplex)的通信方式极大地提高了数据传输的速度和效率。

  • 简化开发复杂度:
    WebSocket作为一种新的协议,旨在简化实时通信应用的开发,避免了频繁的HTTP请求和响应带来的复杂性和性能瓶颈。

1. 传统的HTTP请求-响应模型

  • 特点:传统的Web应用主要基于HTTP协议,采用请求-响应模型。浏览器(客户端)发送请求到服务器,服务器处理请求后返回响应。
  • 限制:HTTP是单向通信,只能由客户端发起请求,服务器被动响应,无法主动推送数据给客户端。

2. 轮询(Polling)

  • 背景:随着Web应用的多样化,特别是对实时数据的需求增加,开发者开始寻求方法让服务器能够“推送”数据给客户端。
  • 方法:客户端定期(例如每几秒钟)向服务器发送HTTP请求查询是否有新数据。
  • 限制:轮询会增加服务器负载,同时由于HTTP请求头较大,造成带宽浪费。此外,频繁的请求也会影响用户体验。

3. 长轮询(Long Polling)

  • 改进:为了解决轮询带来的问题,长轮询技术应运而生。
  • 方法:客户端发起请求后,服务器在没有新数据时保持连接打开状态,直到有新数据时才返回响应。
  • 优点:相比普通轮询,减少了不必要的请求次数,提高了效率。
  • 限制:仍然基于HTTP协议,存在连接保持时间的限制,且服务器资源占用较多。

4. Server-Sent Events (SSE)

  • 介绍:SSE是一种简单的服务器推送技术,允许服务器向客户端发送事件更新。
  • 方法:服务器通过HTTP连接持续发送数据流到客户端,客户端监听这些事件并做出响应。
  • 适用场景:适用于只需要服务器向客户端推送数据的场景,如股票价格更新或新闻流。
  • 限制:仅支持单向通信,即服务器到客户端的通信。

5. WebSocket

  • 背景:随着Web应用对实时双向通信的需求日益增长,需要一种更加高效、低延迟的通信方式。
  • 特点
    • WebSocket协议是在HTML5中引入的,它提供了一种在客户端和服务器之间建立持久连接的方式。
    • 一旦连接建立,双方就可以自由地发送数据,实现了全双工通信。
    • WebSocket基于TCP/IP协议,使用HTTP进行握手,之后转换为二进制帧传输数据,大大减少了通信开销。
    • WebSocket连接一旦建立,就可以长期保持,减少了频繁建立和关闭连接的开销。

三、WebSocket协议解析

1.特点

WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。它被设计用于替代HTTP协议中的轮询请求,以提供更高效的实时数据传输服务。以下是WebSocket协议的一些主要特点:

全双工通信

  • WebSocket允许服务器和客户端双向通信,即数据可以同时从客户端发送到服务器端,也可以从服务器端发送到客户端。

持久连接

  • 一旦WebSocket连接建立后,就会保持打开状态,直到其中一方关闭连接。这使得实时应用的延迟大大降低。

减少开销

  • 相比于HTTP轮询,WebSocket减少了每次消息交换所需的头部大小和其他开销,提高了数据传输效率。

高效的数据传输

  • WebSocket使用二进制帧格式传输数据,可以有效减少文本格式如JSON或XML带来的额外负载。

支持多种类型的数据

  • WebSocket不仅可以传输文本数据(UTF-8编码),还可以传输二进制数据(如图片、音频和视频等)。

心跳机制

  • WebSocket定义了心跳机制来检测连接是否仍然活动,以避免不必要的重连。

安全性

  • WebSocket支持加密连接(wss://),可以通过TLS/SSL协议保护数据传输的安全性。

多路复用

  • 尽管WebSocket本身不直接支持多路复用,但可以在一个连接上通过不同的标识符来区分不同的会话或数据流。

跨平台兼容性

  • WebSocket协议在现代浏览器中得到广泛支持,并且可以在服务器端使用多种编程语言实现。

简单易用

  • WebSocket API简单直观,易于开发人员理解和使用。

2.建立连接和数据通信

WebSocket协议建立连接的过程是一个比较典型的握手过程,它基于HTTP协议来完成。以下是WebSocket连接建立的详细步骤:

第一步: 客户端发起HTTP请求

  1. 请求发起
    • 客户端通过HTTP发起一个特殊的GET请求到服务器,该请求包含特定的Upgrade头,表明希望升级到WebSocket协议。

    • 请求行示例:

      GET /chat HTTP/1.1
      Host: server.example.com
      Upgrade: websocket
      Connection: Upgrade
      Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
      Origin: http://example.com
      Sec-WebSocket-Version: 13
      
    • 其中Sec-WebSocket-Key是一个随机生成的Base64编码的值,用于后续的握手验证。

    • Sec-WebSocket-Version指定使用的WebSocket版本,目前标准版本为13。

第二步: 服务器响应

  1. 响应确认
    • 如果服务器同意升级到WebSocket协议,则返回一个HTTP状态码101 Switching Protocols的响应。

    • 响应示例:

      HTTP/1.1 101 Switching Protocols
      Upgrade: websocket
      Connection: Upgrade
      Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
      
    • Sec-WebSocket-Accept字段包含了客户端发送的Sec-WebSocket-Key经过处理后的结果。处理方式是将Sec-WebSocket-Key与一个固定的258EAFA5-E914-47DA-95CA-C5AB0DC85B11 GUID拼接,然后计算SHA-1哈希,最后再进行Base64编码。

第三步: 握手完成

  1. 握手完成
    • 当客户端收到服务器的响应,并验证了Sec-WebSocket-Accept字段正确无误后,就完成了握手过程。
    • 此时,连接已升级为WebSocket连接,可以开始进行双向通信。

第四步: 数据传输

  1. 数据帧格式
    • WebSocket使用帧来传输数据。每个帧由一个固定长度的头部和一个可变长度的有效载荷组成。
    • 头部包括帧类型(例如文本、二进制或控制帧)、掩码标志以及掩码键(仅当客户端向服务器发送数据时需要掩码)。
  • 掩码标志以及掩码键:
    在WebSocket协议中,掩码标志和掩码键是用来保护客户端到服务器的数据不被中间人窥探的安全措施。具体来说:

掩码标志 (Mask Bit)

  • 定义:掩码标志是一个位标志,用来指示WebSocket帧中的有效载荷数据是否已经被掩码(即加密)。这个标志位于WebSocket帧头部的第一个字节中,它是第7个比特位(从右向左计数)。

  • :如果掩码标志设置为1,则表示有效载荷数据已经被掩码;如果掩码标志设置为0,则表示数据未被掩码。在客户端向服务器发送数据时,掩码标志总是设置为1;而在服务器向客户端发送数据时,掩码标志总是设置为0。

掩码键 (Masking Key)

  • 定义:掩码键是一个4字节的随机值,用于对客户端发送给服务器的数据进行掩码处理。掩码键紧随掩码标志之后出现在WebSocket帧头部。

  • 使用方法:掩码键用于对有效载荷数据进行XOR操作。具体而言,每4个字节的数据使用掩码键的一个字节来进行XOR操作。例如,第一个字节的数据与掩码键的第一个字节进行XOR,第二个字节的数据与掩码键的第二个字节进行XOR,依此类推。当数据长度不是4的倍数时,最后一个掩码键字节会被重复使用直到数据结束。

掩码操作示例

假设掩码键为 0x12 0x34 0x56 0x78,并且要发送的有效载荷数据为 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07,那么掩码操作过程如下:

  • 第1字节:0x00 XOR 0x12 = 0x12
  • 第2字节:0x01 XOR 0x34 = 0x35
  • 第3字节:0x02 XOR 0x56 = 0x56
  • 第4字节:0x03 XOR 0x78 = 0x7b
  • 第5字节:0x04 XOR 0x12 = 0x16 (掩码键循环)
  • 第6字节:0x05 XOR 0x34 = 0x37
  • 第7字节:0x06 XOR 0x56 = 0x5e
  • 第8字节:0x07 XOR 0x78 = 0x7f

因此,掩码后的数据为 0x12 0x35 0x56 0x7b 0x16 0x37 0x5e 0x7f

当服务器接收到这个掩码后的数据时,它会使用相同的掩码键来反掩码(解密)这些数据,从而恢复出原始数据。

掩码机制确保了客户端到服务器的数据不会在传输过程中被轻易读取,增加了通信的安全性。

  1. 数据传输
    • 双方可以开始发送数据帧。文本数据通常使用UTF-8编码,而二进制数据则按原样传输。
    • 控制帧用于特殊目的,比如关闭连接(Close帧)、ping和pong(Ping帧和Pong帧)等。

第五步: 连接关闭

  1. 关闭连接
    • 任何一方都可以发送一个Close帧来请求关闭连接。
    • 接收方接收到Close帧后,可以选择发送自己的Close帧作为响应。
    • 最终,双方都发送完数据后,会关闭TCP连接。

相关文章:

WebSocket协议解析

文章目录 一、HTTP协议与HTTPS协议1.HTTP协议的用处2.HTTP协议的特点3.HTTP协议的工作流程4.HTTPS协议的用处5.HTTPS协议的特点6.HTTPS协议的工作流程 二、WebSocket协议出现的原因1. 传统的HTTP请求-响应模型2. 轮询(Polling)3. 长轮询(Long…...

ES6 (一)——ES6 简介及环境搭建

目录 简介 环境搭建 可以在 Node.js 环境中运行 ES6 webpack 入口 (entry) loader 插件 (plugins) 利用 webpack 搭建应用 gulp 如何使用? 简介 ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版…...

HarmonyOS开发案例:列表场景实例-TaskPool

介绍 本实例通过列表场景实例讲解,介绍在TaskPool线程中操作关系型数据库的方法,涵盖单条插入、批量插入、删除和查询操作。 效果图预览 使用说明 进入页面有insert(单条数据插入)、batch insert(批量数据插入)、query(查询操作)三个按钮,…...

谷歌浏览器如何隐藏书签

谷歌浏览器的书签栏是一个极为方便的功能,它能够帮助用户快速访问自己频繁使用的网页。然而,有些时候为了保护个人隐私或使浏览界面更为简洁,我们可能需要隐藏书签栏。接下来就为大家分享如何隐藏谷歌浏览器的书签栏,一起来看看吧…...

SQL - 视图

我们可以把查询或子查询存到视图里,视图的作用就像一张虚拟表,再次查询时,就不需要再写一次复杂的查询。创建视图 create view 视图名 as (查询); create or replace view clients_balance as (查询); create or replace view clients_balanc…...

centos7环境升级默认的gcc 4.8.5到gcc 8.2.0, 并且升级glibc到glibc 2.28

这里写目录标题 makegccglibc make #下载 wget http://ftp.gnu.org/gnu/make/make-4.2.tar.gz tar -xf make-4.2.tar.gz cd make-4.2 ./configure make -j4 make install mv /usr/bin/make /usr/bin/make_bak cp ./make /usr/bin/make -v GNU Make 4.2 Built for x86_64-pc-li…...

FastHTML:使用 Python 彻底改变 Web 开发

什么是 FastHTML?🌐 FastHTML 是一个现代 Python Web 应用程序框架,其真正目的是让 Python 开发人员轻松进行 Web 开发。它大大减少了对 JavaScript 和 CSS 构建交互式和可扩展 Web 应用程序的依赖。FastHTML 通过使用 Python 对象来表示 HTM…...

快速排序的深入优化探讨

快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后,key对数组的分割,如果每次选key基本⼆分居中,那么快排的递归树就是颗均匀的满⼆叉树,性能最佳。但是实践中虽然不可能每次都是⼆分居中,但是性能也还是可…...

c语言杂谈系列:模拟虚函数

从整体来看&#xff0c;笔者的做法与之前的模拟多态十分相似&#xff0c;毕竟c多态的实现与虚函数密切相关 废话少说&#xff0c;see my code&#xff1a; kernel.c#include "kernel.h" #include <stdio.h>void shape_draw(struct shape_t* obj) {/* Call dr…...

短视频推广App不再难!Xinstall来帮忙

在短视频风靡的今天&#xff0c;如何利用这一热门媒介有效推广App&#xff0c;成为了许多推广者关注的焦点。而Xinstall&#xff0c;作为国内专业的App全渠道统计服务商&#xff0c;正是你解决这一难题的得力助手。 首先&#xff0c;Xinstall在数据维度上的优势无可比拟。它能…...

打靶记录13——doubletrouble

靶机&#xff1a; https://www.vulnhub.com/entry/doubletrouble-1,743/ 难度&#xff1a; 中 目标&#xff1a; 取得两台靶机 root 权限 涉及攻击方法&#xff1a; 主机发现端口扫描Web信息收集开源CMS漏洞利用隐写术密码爆破GTFObins提权SQL盲注脏牛提权 学习记录&am…...

awk文本处理工具

awk 是一个强大的文本处理工具&#xff0c;在Shell编程中常用于处理和分析文本数据。它可以按列处理数据&#xff0c;进行模式匹配&#xff0c;生成报告&#xff0c;执行计算等。以下是一些 awk 的主要功能和使用场景&#xff1a; 期待您的关注 美好的观念较美人尤为可爱 目录 …...

计算机毕业设计选题推荐-学院网站系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

Spring模块详解Ⅰ

目录 SpringSpring框架的主要功能模块1. Core Container&#xff08;核心容器&#xff09;2. Data Access/Integration&#xff08;数据访问与集成&#xff09;3. Web4. AOP (Aspect-Oriented Programming&#xff0c;面向切面编程)5. Instrumentation&#xff08;工具集&#…...

C语言程序设计-练习篇

山海自有归期&#xff0c;风雨自有相逢。 一 下面代码的结果是什么&#xff1f; int main() { int i 0; for (i 0; i < 10; i) { if (i 5) //此处为赋值&#xff0c;i 5表达式结果为5 printf("%d ", i); //表达式为真&a…...

【Oracle篇】统计信息和动态采样的深度剖析(第一篇,总共六篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…...

无源互调自动化测试软件应用案例分享:S参数和互调的高效测试

随着产品种类的丰富和市场需求的变化&#xff0c;合肥某电子技术公司意识到&#xff0c;传统的手工测试已无法满足公司持续发展的需要。于是&#xff0c;一场自动化测试转型悄然展开。 一、背景介绍 合肥某电子技术公司成立于2009年&#xff0c;专注于功分器、耦合器、负载器、…...

【6大设计原则】精通设计模式之里氏代换原则:从理论到实践,掌握代码演化的黄金法则

一、引言 1.1 设计模式的必要性 在软件开发的复杂性面前&#xff0c;设计模式提供了一套成熟的解决方案&#xff0c;它们是经过多年实践总结出来的&#xff0c;能够帮助我们应对各种编程难题。设计模式不仅仅是一种编程技巧&#xff0c;更是一种编程哲学&#xff0c;它能够提…...

国内服务器安装Docker提示Failed to connect to download.docker.com port 443的解决方案

解决方案 换国内镜像源。我用的是清华的。https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ 自己找自己对应的版本。 例如你的Ubuntu系统。就用下列命令 sudo curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/do…...

前端开发攻略---彻底弄懂跨域解决方案

目录 1、浏览器的同源策略 1.1 源 1.2 同源与非同源 1.3 同源请求与非同源请求 2、跨域受到的限制 3、注意点 4、CORS解决Ajax跨域问题 4.1 CORS概述 4.2 CORS解决简单请求跨域 4.3 简单请求与复杂请求 4.4 CORS解决复杂请求跨域 4.5 借助CORS库快速完成配置 5、JS…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...