2.网络编程-HTTP和HTTPS
目录
HTTP介绍
HTTP协议主要组成部分
GET 和 POST有什么区别
常见的 HTTP 状态码有哪些
http状态码100
HTTP1.1 和 HTTP1.0 的区别有哪些
HTTPS 和 HTTP 的区别是什么
HTTP2 和 HTTP1.1 的区别是什么
HTTP3 和 HTTP2 的区别是什么
HTTPS的请求过程
对称加密和非对称加密的区别
HTTP介绍
超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP)是一种基于客户端/服务器模型的应用层协议,用于在分布式、协作式的超媒体信息系统中交换数据。HTTP是万维网(WWW)的核心通信协议,允许用户代理(如Web浏览器)与Web服务器进行通信,获取网页、图片、文件以及其他类型的资源。
HTTP协议特点:
-
请求/响应模型:客户端(浏览器)向服务器发出请求,服务器接收请求后生成并返回响应。每个请求和响应都包含起始行、头部字段和可选的主体内容。
-
无状态:HTTP协议本身不保存任何关于之前请求或会话的状态信息。如果需要维护状态,通常通过Cookie、session或其他机制实现。
-
文本格式:HTTP协议的请求和响应报文都采用ASCII文本格式,尽管现在普遍通过gzip等压缩算法来减少传输量。
-
方法多样:HTTP定义了多种请求方法,如GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)、HEAD(获取头部信息)、OPTIONS(询问服务器支持哪些方法)等。
-
状态码反馈:服务器通过状态码告知客户端请求的处理结果,如200(成功)、404(未找到资源)、500(服务器内部错误)等。
-
可扩展性:HTTP协议允许通过首部字段添加附加信息,这些信息可以影响请求或响应的行为,也可以用于内容协商、缓存控制、身份验证等。
-
安全增强:HTTPS是HTTP的安全版本,通过SSL/TLS协议对HTTP通信进行加密,提供数据传输的隐私保护和完整性校验。
随着时间的推移,HTTP协议经历了多次版本迭代,从最早的HTTP/1.0到如今广泛使用的HTTP/1.1,再到性能更强的HTTP/2和HTTP/3。HTTP/2引入了多路复用、二进制分帧等新特性,大大提高了网页加载速度;而HTTP/3则采用了QUIC协议作为传输层,进一步优化了连接性能和安全性。
HTTP协议主要组成部分
HTTP(Hypertext Transfer Protocol)协议由以下几个主要部分组成:
-
请求(Request)
- 请求行(Request Line):包括方法(Method,如GET、POST、PUT、DELETE等)、请求URI(Uniform Resource Identifier)和HTTP协议版本。
- 请求头部(Request Headers):一系列键值对,包含诸如Host、Accept、Content-Type、Authorization、Cookie等信息,用于描述请求的更多细节。
- 空行:请求头部结束后,有一个空行作为分隔。
- 请求主体(Request Body):可选部分,用于承载请求数据,例如在POST或PUT请求中提交的数据。如果是GET请求,通常没有请求主体。
-
响应(Response)
- 状态行(Status Line):包括协议版本、状态码(Status Code,如200 OK、404 Not Found等)和状态描述。
- 响应头部(Response Headers):类似于请求头部,但也包含服务器特有的信息,如Server、Date、Location、Set-Cookie等。
- 空行:响应头部结束后同样有空行作为分隔。
- 响应主体(Response Body):承载返回给客户端的数据,可能是HTML文档、JSON对象、图像、音频等资源。
GET 和 POST有什么区别
HTTP协议中的GET和POST是两种最常见的HTTP方法(或称谓HTTP动词),它们都是客户端向服务器发送请求的方式,用于从服务器获取数据或向服务器提交数据。
-
GET
- 作用:GET方法是用来从服务器获取资源的,是最常见的HTTP方法,用于获取指定URI(统一资源标识符)所指向的资源。
- 特点:
- 安全:GET请求通常被认为是安全的,因为它只是获取数据,不会对服务器数据产生改动。
- 幂等性:多次执行同样的GET请求将会得到相同的结果(除非资源本身发生改变)。
- 可见性:所有请求参数都会附在URL之后,可通过浏览器地址栏查看。
- 缓存:GET请求的响应可以被缓存。
- 数据量:由于参数直接写在URL中,因此GET请求的数据量有限,不适合大数据量传输。
-
POST
- 作用:POST方法用于向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中提交给服务器。
- 特点:
- 不安全:POST请求可能会引起服务器数据的变化,例如创建新的资源或更新已有资源。
- 非幂等性:多次执行同样的POST请求可能会导致服务器状态的不同结果,如资源被多次创建。
- 隐藏性:POST请求的参数在请求体中传输,而不是URL,提高了数据私密性和安全性。
- 数据量:POST请求的数据量没有硬性限制,可以用来传输大量数据。
- 缓存:POST请求默认情况下不会被缓存。
- 其他方法:
-
PUT
- 用途:用于向指定资源位置上传其最新内容或创建新资源(如果资源不存在)。请求体包含完整的资源表示。
- 特性:PUT方法是幂等的,发送同一个请求多次会产生同样的效果(只要请求体内容相同)。
-
DELETE
- 用途:请求服务器删除指定的资源。
- 特性:DELETE方法也是幂等的,多次发出相同的请求会删除指定资源,不会有其他影响。
-
HEAD
- 用途:类似于GET,但只请求服务器返回响应头信息,不返回响应体内容。用于获取资源的元信息。
-
OPTIONS
- 用途:用于获取服务器支持的HTTP方法列表,或者获取特定资源的通信选项。
-
PATCH
- 用途:用于对资源进行局部更新,发送资源的部分修改内容。
-
CONNECT
- 用途:请求代理服务器建立到目标服务器的隧道。
-
TRACE
- 用途:让服务器端将收到的请求原样返回给客户端,用于诊断或测试。
-
这些方法是HTTP协议的重要组成部分,它们定义了客户端和服务器之间如何交互以操作资源。在RESTful架构中,这些方法更是有着严格的语义和用途。
常见的 HTTP 状态码有哪些
HTTP状态码是HTTP协议中定义的三位数字代码,用于表示服务器对客户端HTTP请求的响应结果。以下是一些常见的HTTP状态码及其含义:
-
成功状态码(2xx)
- 200 OK:请求已成功,请求的数据或资源已成功加载并返回。
- 201 Created:请求已成功,并且服务器创建了一个新的资源。
- 202 Accepted:服务器已接受请求,但尚未完成处理(异步操作)。
- 204 No Content:服务器成功处理了请求,但没有返回任何内容(不包含响应体)。
-
重定向状态码(3xx)
- 301 Moved Permanently:永久重定向,请求的资源已被永久移动到新的URI。
- 302 Found:临时重定向,请求的资源临时存在于另一个URI。
- 304 Not Modified:客户端缓存有效,资源自上次请求以来未被修改过。
-
客户端错误状态码(4xx)
- 400 Bad Request:客户端请求有语法错误,服务器无法理解。
- 401 Unauthorized:请求未经授权,需要有效的身份验证凭证。
- 403 Forbidden:服务器理解请求,但是拒绝执行,通常是因为权限不足。
- 404 Not Found:请求的资源在服务器上未找到。
- 405 Method Not Allowed:请求方法不被允许(如尝试对只允许GET的资源执行POST操作)。
-
服务器错误状态码(5xx)
- 500 Internal Server Error:服务器遇到了意外情况,无法完成请求。
- 501 Not Implemented:服务器不支持请求的功能,无法完成请求。
- 502 Bad Gateway:服务器作为网关或代理时,收到了无效响应。
- 503 Service Unavailable:服务器暂时无法处理请求,可能是因为过载或正在进行维护。
- 504 Gateway Timeout:服务器作为网关或代理时,未能在预设时间内从上游服务器获得响应。
以上列举了一些常见的HTTP状态码,但实际上HTTP协议定义了从100到599的各种状态码,分别对应不同类型的响应情况。
http状态码100
HTTP状态码100表示“Continue(继续)”。这是一个临时响应状态码,属于1xx系列的状态码,主要用于客户端与服务器之间的互动过程。当客户端在发送请求数据之前先发送了一个 Expect: 100-continue 请求头时,服务器若同意客户端继续发送请求主体数据,则会返回HTTP状态码100。
具体流程如下:
- 客户端发送HTTP请求时,如果预计请求主体较大,或者想确认服务器是否有条件接受请求主体数据,会在请求头中包含
Expect: 100-continue
。 - 服务器收到这样的请求后,如果愿意接收请求主体数据,则会先回复一个状态码为100的响应,通知客户端可以继续发送请求的剩余部分(即请求主体)。
- 客户端在接收到100状态码后,确认服务器准备好接收数据,便会接着发送请求的主体内容。
请注意,不是所有的客户端或服务器都需要使用100 Continue流程,它主要用于节省带宽,尤其是在请求可能因为某种原因被服务器拒绝时,避免不必要的大体积数据传输。
HTTP1.1 和 HTTP1.0 的区别有哪些
HTTP/1.1 与 HTTP/1.0 是 HTTP 协议发展过程中的两个重要版本,它们之间存在显著的区别,主要包括以下几点:
持久连接(Persistent Connections):
- HTTP/1.0 默认采用非持久连接,即每次请求-响应完成后,TCP连接就会被关闭。这导致了每次请求都需要重新建立连接,增加了延迟和资源消耗。
- HTTP/1.1 默认支持持久连接,也称为keep-alive连接,允许一个TCP连接上可以连续处理多个请求和响应,极大地提高了性能。
管道化(Pipelining):
- HTTP/1.1 引入了请求管道化,即在持久连接上,客户端可以在收到前一个响应之前就发送下一个请求,但要注意的是,响应仍然按照请求的顺序返回,且如果某个请求在处理过程中出现问题,后面的请求可能会阻塞。
- HTTP/1.0 不支持请求管道化。
缓存控制:
- HTTP/1.0 提供了基本的缓存机制,通过Expires和Pragma头部字段进行控制,但相对较弱。
- HTTP/1.1 加强了缓存控制机制,引入了Cache-Control头部字段,以及ETag、Last-Modified、If-Modified-Since、If-None-Match等条件请求头部,提供了更细粒度的缓存策略。
HOST头部:
- HTTP/1.0 没有强制要求使用Host头部字段来区分同一服务器上的多个网站或服务。
- HTTP/1.1 强制要求所有请求必须包含Host头部字段,这使得一台服务器可以托管多个域名,有效地推动了虚拟主机技术的发展。
错误提示:
- HTTP/1.1 添加了许多新的状态码,提供了更详尽的错误信息和状态指示,比如100(Continue)用于期望确认后再发送数据,以及其他众多的状态码。
内容编码和传输编码:
- HTTP/1.1 支持内容编码(如gzip压缩)和传输编码(如chunked编码),可以减少网络传输的数据量,提高传输效率。
分块传输编码(Chunked transfer encoding):
- HTTP/1.1 引入了分块传输编码,允许服务器在不知道内容长度的情况下逐步发送响应,这对于动态生成的内容和长连接传输非常有用。
带宽优化:
- HTTP/1.1 允许请求部分资源(Range requests),客户端可以请求资源的一部分,有利于实现断点续传、媒体流等应用。
总的来说,HTTP/1.1 相对于 HTTP/1.0 在性能、效率和功能上有了很大的改进和扩展,更适应现代网络应用的需求。然而,HTTP/1.x 系列的协议依然存在一些局限性,如队头阻塞等问题,这些问题在HTTP/2和HTTP/3版本中得到了进一步解决。
HTTPS 和 HTTP 的区别是什么
HTTPS 和 HTTP 的区别主要体现在以下几个方面:
-
安全性:
- HTTP(HyperText Transfer Protocol)是超文本传输协议,数据在传输过程中是以明文形式发送的,不提供任何形式的数据加密,因此容易被第三方监听、窃取和篡改。
- HTTPS(Hypertext Transfer Protocol Secure)是在 HTTP 基础上加入了 SSL/TLS 加密层,能够对传输数据进行加密,从而保证了通信双方数据的机密性、完整性和身份校验。这大大增强了用户信息和交易数据的安全性。
-
端口:
- HTTP 通常使用标准的 TCP 端口 80 进行通信。
- HTTPS 使用的是加密通信端口 443。
-
证书:
- HTTP 不需要任何证书,所有的数据都是透明传输。
- HTTPS 必须要有SSL/TLS证书,并且这些证书需要经过权威的数字证书认证机构(CA)签发,以证明服务器的身份。现在有许多免费的证书颁发机构(如Let's Encrypt)提供免费的SSL证书。
-
连接建立过程:
- HTTP 连接建立相对简单,直接通过TCP的三次握手建立连接即可。
- HTTPS 在TCP握手基础上,还需要额外进行SSL/TLS握手过程,包括证书交换、密钥协商、身份验证等多个步骤,整个过程更为复杂,需要更多的时间和计算资源。
-
资源消耗:
- HTTP 由于没有加密过程,所以在同等条件下,其处理速度较快,占用的系统资源较少。
- HTTPS 因为涉及到加密解密操作,所以处理速度较慢,而且会增加服务器CPU和内存的使用,同时也会对客户端产生一定的影响。
-
信任和隐私:
- HTTP 页面可能导致浏览器显示“不安全”警告,尤其是在涉及敏感信息传输时。
- HTTPS 能够为用户提供信任感,因为它能够保护用户登录凭据、信用卡号等敏感信息,防止中间人攻击和数据篡改。
综上所述,HTTPS 旨在为 Web 应用提供安全环境,尤其适用于涉及个人信息输入、金融交易和其他敏感数据交互的场景。随着网络安全意识的提升,越来越多的网站开始使用 HTTPS 作为标准通信协议。
HTTP2 和 HTTP1.1 的区别是什么
HTTP/2 与 HTTP/1.1 的区别主要包括以下几个关键方面:
-
多路复用(Multiplexing):
- HTTP/1.1 中,同一域名下的所有请求通常会串行化执行,即使在打开多个 TCP 连接(通常称为持久连接或pipelining)的情况下,还是有可能因头部阻塞(Head-of-line blocking)而导致性能瓶颈。
- HTTP/2 引入了多路复用技术,允许多个请求在一个TCP连接上并行处理,消除了请求间的阻塞,显著提高了带宽利用率和页面加载速度。
-
二进制分帧(Binary Framing):
- HTTP/1.1 使用文本格式的报文进行通信。
- HTTP/2 把请求和响应分解为多个小的二进制帧,这些帧可以交错、优先级排序并在连接上独立地进行传输,进而提高了效率。
-
头部压缩(Header Compression):
- HTTP/1.1 中,头部信息通常会重复很多次,尤其是对于大型网站,这会占用大量的带宽。
- HTTP/2 使用HPACK压缩算法对头部进行压缩,减少了重复头部的传输量,提高了传输效率。
-
服务器推送(Server Push):
- HTTP/1.1 只能被动响应客户端请求。
- HTTP/2 允许服务器在客户端请求一个资源的同时主动推送其他资源,这可以减少延迟,提前加载关联资源,优化用户体验。
-
优先级与流控(Prioritization and Flow Control):
- HTTP/2 允许客户端指定请求的优先级,服务器可以根据这些信息合理安排资源的发送顺序。
- 同时,HTTP/2 引入了流控制机制,允许两端分别控制数据的发送速率,以防止较快一端的突发数据淹没较慢一端,保证了连接的稳定性。
总的来说,HTTP/2 在很大程度上解决了 HTTP/1.1 存在的性能瓶颈问题,大幅提升了网络应用的性能和效率。
HTTP3 和 HTTP2 的区别是什么
HTTP/3 和 HTTP/2 主要区别在于底层传输协议的改变以及对性能和可靠性的改进。以下是两者之间的主要区别:
-
传输层协议:
- HTTP/2:基于TCP协议,继承了TCP的可靠性,但受限于TCP的队头阻塞问题。
- HTTP/3:基于QUIC协议,QUIC是基于UDP的,旨在解决TCP中存在的延迟和队头阻塞问题。QUIC集成了TCP的可靠性机制(如流量控制、错误恢复等)并采用了自身的多路复用和流控机制。
-
连接初始化与重连:
- HTTP/2:使用TCP连接,建立连接需要经过握手(如TCP握手和TLS握手),在丢包或网络不稳定时,恢复连接可能需要较长时间。
- HTTP/3:QUIC协议提供了更快的连接初始化,支持0-RTT(零往返时间)握手,这意味着在某些情况下,客户端在第一次请求时就可以发送数据,无需等待握手完成。同时QUIC的重连机制更快,能更快地恢复丢失的连接。
-
多路复用与流控制:
- HTTP/2:已经实现了多路复用,允许在一个TCP连接上并行处理多个请求和响应,但仍受TCP的队头阻塞影响。
- HTTP/3:QUIC同样支持多路复用,但其流控制和多路复用机制更加灵活和高效,能更好地处理乱序到达的数据包,减轻了队头阻塞现象。
-
安全性:
- HTTP/2:默认使用TLS加密(即HTTPS),但仍然是基于TCP的加密。
- HTTP/3:QUIC内置了加密层,使用TLS 1.3进行加密,且将加密层与传输层紧密结合,提高了安全性。
-
错误恢复与拥塞控制:
- HTTP/2:依赖于TCP的拥塞控制和错误恢复机制。
- HTTP/3:QUIC具有自己的拥塞控制算法和快速重传/恢复机制,能更快地应对丢包和网络状况变化。
总体来说,HTTP/3 相比 HTTP/2 在连接建立速度、数据传输效率、错误恢复能力和抗丢包能力上有显著提升,致力于提供更快、更稳定的网络体验。
HTTPS的请求过程
HTTPS(Hypertext Transfer Protocol Secure)的请求过程相较于HTTP增加了加密和身份验证的步骤,以下是HTTPS请求的基本过程:
-
客户端请求:
-
用户在浏览器中输入HTTPS URL并按下回车键,浏览器发起连接到服务器的443端口(HTTPS的默认端口)。
-
-
SSL/TLS握手:
- 第一步:ClientHello —— 客户端发送一个SSL/TLS握手请求,其中包括客户端支持的SSL/TLS版本、加密套件列表以及一个随机数。
- 第二步:ServerHello —— 服务器响应ClientHello,选择一个双方都支持的SSL/TLS版本、加密套件,并发送服务器的随机数以及服务器证书。服务器证书中包含了服务器的公钥和身份信息,由可信的证书颁发机构(CA)签名。
- 第三步:证书验证 —— 客户端验证服务器证书的有效性,包括检查证书是否由受信任的CA签署、证书是否过期、服务器名称是否与请求的域名相匹配等。
- 第四步:密钥交换:
- 通常,客户端生成一个随机的会话密钥,并使用服务器证书中的公钥加密后发送给服务器(例如使用RSA或ECDHE等密钥交换算法)。
- 如果服务器要求客户端证书,客户端也会在此阶段发送自己的证书以进行身份验证。
- 第五步:完成握手:
- 服务器使用私钥解密会话密钥,然后双方通过交换ChangeCipherSpec消息告知即将启用加密通信,并通过Finished消息来验证握手过程的完整性。
- 客户端也发送ChangeCipherSpec和Finished消息以完成握手。
-
加密通信:
-
完成SSL/TLS握手后,客户端和服务器使用协商好的加密套件和会话密钥进行对称加密通信。此后,所有的HTTP请求和响应都在这个加密通道中传输。
-
-
HTTP请求与响应:
- 客户端现在通过安全的SSL/TLS通道发送HTTP请求给服务器。
- 服务器收到请求后,处理请求并返回HTTP响应,这个响应内容也是加密的。
- 客户端接收到响应后,解密响应并根据HTTP响应内容处理请求结果,如渲染网页内容等。
-
连接关闭:
- 当客户端和服务器完成数据交换后,可以关闭连接,也可以根据HTTP/2或HTTP/3的特点保持连接以便复用。
请注意,SSL/TLS握手的具体流程可能因版本和配置有所不同,上述描述提供了一个大致的通用过程。在实际中,还会有更细致的安全控制措施,如OCSP stapling、Certificate Transparency等。
对称加密和非对称加密的区别
对称加密与非对称加密是密码学中两种主要的加密方式,它们的主要区别在于密钥管理和加密/解密机制的不同:
-
对称加密(Symmetric Encryption)
- 特点:
- 使用相同的密钥(称为对称密钥)进行加密和解密。
- 加密和解密的过程高效快速,适用于大量数据的加密。
- 密钥管理相对复杂,因为所有需要通信的双方都需要预先共享同一密钥,并且该密钥必须安全地传输和存储,以防被未经授权的第三方获取。
- 例子:DES、3DES、AES等。
- 特点:
-
非对称加密(Asymmetric Encryption)
- 特点:
- 使用两个相关的密钥,一个称为公钥,可以公开给任何人;另一个称为私钥,仅由密钥所有者知道并保密。
- 公钥用于加密,对应私钥用于解密;或者私钥用于签名,公钥用于验证签名。
- 加密和解密过程相比对称加密较慢,因此一般用于加密小量但敏感的数据,如密钥交换或数字签名。
- 提供了更高的安全性,因为即使公钥被截获,没有对应的私钥也无法解密数据,反之亦然。
- 例子:RSA、ECC(椭圆曲线加密)、DSA等。
- 特点:
总结起来,对称加密的优点是效率高,缺点是在密钥管理上存在风险;而非对称加密虽然效率较低,但提供了更好的密钥管理方案,尤其适用于分布式环境中安全地进行密钥交换。在实际应用中,往往结合两者的优势,比如通过非对称加密交换一个临时的对称密钥,再用这个对称密钥来加密大量的数据传输,这种方式既保证了效率又提升了安全性。
相关文章:

2.网络编程-HTTP和HTTPS
目录 HTTP介绍 HTTP协议主要组成部分 GET 和 POST有什么区别 常见的 HTTP 状态码有哪些 http状态码100 HTTP1.1 和 HTTP1.0 的区别有哪些 HTTPS 和 HTTP 的区别是什么 HTTP2 和 HTTP1.1 的区别是什么 HTTP3 和 HTTP2 的区别是什么 HTTPS的请求过程 对称加密和非对称…...

MTK i500p AIoT解决方案
一、方案概述 i500p是一款强大而高效的AIoT平台,专为便携式、家用或商用物联网应用而设计,这些应用通常需要大量的边缘计算,需要强大的多媒体功能和多任务操作系统。该平台集成了Arm Cortex-A73 和 Cortex-A53 的四核集群,工作频…...

ES入门十四:分词器
我们存储到ES中数据大致分为以下两种: 全文本,例如文章内容、通知内容精确值,如实体Id 在对这两类值进行查询的时候,精确值类型会比较它们的二进制,其结果只有相等或者不想等。而对全文本类型进行等值比较是不太实现…...

汇编——SSE打包整数
SSE也可以进行整数向量的加法,示例如下: ;sse_integer.asm extern printfsection .datadummy db 13 align 16pdivector1 dd 1dd 2dd 3dd 4pdivector2 dd 5dd 6dd 7dd 8fmt1 db "Packed Integer Vector 1: %d, %d, %d, %d",…...

动态规划(2)
动态规划(2) 文章目录 动态规划(2)1、聪明的寻宝人2、基因检测3、药剂稀释4、找相似串 1、聪明的寻宝人 #include <iostream> using namespace std; void MaxValue(int values[], int weights[], int n, int m) {int dp[21…...

JetBrains IDE 2024.1 发布 - 开发者工具
JetBrains IDE 2024.1 (macOS, Linux, Windows) - 开发者工具 CLion, DataGrip, DataSpell, Fleet, GoLand, IntelliJ IDEA, PhpStorm, PyCharm, Rider, RubyMine, WebStorm 请访问原文链接:JetBrains IDE 2024.1 (macOS, Linux, Windows) - 开发者工具࿰…...

C++ 构造函数中的参数顺序
描述: 未初始化的参数必须在初始化参数之前 正确 ✓ 写法: mother(const char* food, const char* lastName"无姓", const char* firstName "无名" ); 错误❌写法: mother(const char* lastName"无姓", …...

Git Flow困境逃脱指南
本来来自极狐GitLab 资源中心,原文链接:https://resources.gitlab.cn/articles/020183ba-cfc0-4917-b901-248acdcfc92f。 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab ÿ…...

MySQL的sql_mode模式简介
前言 今天同事使用数据库时报错,排查问题时发现配置文件里的sql_mode配置被人注释了,所以通过查询资料对这个配置进行了下了解。 介绍 mysql为了支持在不同的环境下运行,允许我们给它设置不同的运行模式(sql_mode)。 不同的运行模式&#…...

性能优化-如何爽玩多线程来开发
前言 多线程大家肯定都不陌生,理论滚瓜烂熟,八股天花乱坠,但是大家有多少在代码中实践过呢?很多人在实际开发中可能就用用Async,new Thread()。线程池也很少有人会自己去建,默认的随便用用。在工作中大家对…...

非关系型数据库-----------Redis的主从复制、哨兵模式
目录 一、redis群集有三种模式 1.1主从复制、哨兵、集群的区别 1.1.1主从复制 1.1.2哨兵 1.1.3集群 二、主从复制 2.1主从复制概述 2.2主从复制的作用 ①数据冗余 ②故障恢复 ③负载均衡 ④高可用基石 2.3主从复制流程 2.4搭建redis主从复制 2.4.1环境准备 2.4…...

使用docx4j转换word为pdf处理中文乱码问题
word转pdf 实现方法 mavendocx4j版本自己酌情升级 实现方法 import org.docx4j.Docx4J; import org.docx4j.fonts.IdentityPlusMapper; import org.docx4j.fonts.Mapper; import org.docx4j.fonts.PhysicalFonts; import org.docx4j.openpackaging.packages.WordprocessingMLP…...

【引子】C++从介绍到HelloWorld
C从介绍到HelloWorld 一、C的介绍1. 简介2. 应用场景3. C的标准4. C的运行过程 二、Visual Studio的安装1. 什么是Visual Studio2. Visual Studio的安装 三、完成HelloWorld1.…...

Django检测到会话cookie中缺少HttpOnly属性手工复现
一、漏洞复现 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。 第一步:复制URL:http://192.168.43.219在浏览器打开,…...

2024数字城市建设博览会:一站式平台,满足多元需求
2024数字城市建设博览会:引领未来城市发展的风向标 2024年,一场前所未有的盛会——数字城市建设博览会暨交流大会,将在雄安这座未来之城拉开帷幕。本次大会不仅是数字经济全产业链的精英集结,更是一场汇聚了众多优质项目和丰富客…...

iOS 17.5系统或可识别并禁用未知跟踪器,苹果Find My技术应用越来越合理
苹果公司去年与谷歌合作,宣布将制定新的行业标准来解决人们日益关注的跟踪器隐私问题。苹果计划在即将发布的 iOS 17.5 系统中加入这项提升用户隐私保护的新功能。 科技网站 9to5Mac 在苹果发布的 iOS 17.5 开发者测试版内部代码中发现了这项反跟踪功能的蛛丝马迹…...

关于搭建elk日志平台
我这边是使用docker compose进行的搭建 所以在使用的时候 需要自行提前安装docker以及dockercompose环境 或者从官网下载对应安装包也可以 具体文章看下一章节:【ELK】搭建elk日志平台(使用docker-compose),并接入springboot项目...

【全套源码教程】基于SpringBoot+MyBatis+Vue的流浪动物救助网站的设计与实现
目录 前言 需求分析 可行性分析 技术实现 后端框架:Spring Boot 持久层框架:MyBatis 前端框架:Vue.js 数据库:MySQL 功能介绍 前台界面功能介绍 动物领养及捐赠 宠物论坛 公告信息 商品页面 寻宠服务 个人中心 购…...

Word wrap在计算机代表的含义(自动换行)
“Word wrap”是一个计算机术语,用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中,都有实现这一功能的函数或选项。 在编程中,例如某些编程语言中的wordwrap函数,能够按…...

室友打团太吵?一条命令让它卡死
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:更多干货,请关注专栏《网络安全自学教程》 SYN Flood 1、hping3实现SYN Flood1.1、主机探测1.2、扫描端…...

RabbitMQ3.13.x之八_RabbitMQ中数据文件和目录位置
RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置 文章目录 RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置1. 概述2. 覆盖位置1. 路径和目录名称限制2.所需的文件和目录权限 3. 环境变量4. Linux、macOS、BSD上的默认位置5. Windows上的默认位置6. 通用二进制构建默认值 1. 概…...

仿抖音短视频直播带货刷一刷商城社交电商源码系统小程序APP开发
系统功能介绍 一、短视频与社交功能 短视频浏览与互动 用户可以浏览仿抖音风格的短视频,包括评论、点赞、进入视频发布者的主页,以及加关注等功能。系统会显示用户关注的好友列表,方便用户快速查看好友发布的视频。用户还可以浏览同城视频&…...

Vue - 你知道Vue组件中的data为什么是一个函数吗
难度级别:中高级及以上 提问概率:80% 在Vue项目中,App.vue下的每个子组件都会生成一个单独的Vue实例对象,但这些子对象都是通过通过vue.extend方法创建而来的,也就是说我们平时在项目中所定义的Vue组件,都有一个相同的父类对象。这样也就…...

MUX VLAN
目录 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.使用Hybrid端口实现网络需求 3.使用Mux VLAN实现网络需求 原理概述 在实际的企业网络环境中,往往需要所有的终端用户都能够访问某些特定的服务器,而用户之间的访问控制规则则比较复杂。在…...

漫谈:“标准”是一种幻觉 C++语言标准的意义
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 “标准”这个词很迷惑…...

【Wbpack原理】基础流程解析,实现 mini-webpack
【Wbpack原理】基础流程解析,实现 mini-webpack ⛄:webpack 对前端同学来说并不陌生,它是我们学习前端工程化的第一站,在最开始的 vue-cli 中我们就可以发现它的身影。我们的 vue/react 项目是如何打包成 js 文件并在浏览器中运行…...

Debian 安装 python 3.9.6
安装相关依赖 sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev 下载Python 源码 wget https://mirrors.aliyun.com/python-release/source/Py…...

搜索二维矩阵2 合并两个有序链表
240. 搜索二维矩阵 II - 力扣(LeetCode) class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int i matrix.size() - 1, j 0;while(i > 0 && j < matrix[0].size()){if(matrix[i][j…...

深入Tauri开发——从环境搭建到项目构建
深入Tauri开发——从环境搭建到项目构建 开启你的Tauri桌面应用开发之旅(续) 经过上一篇文章的基础介绍,现在让我们更进一步,详细阐述如何在Windows和macOS平台上顺利搭建Tauri应用所需的开发环境,并指导您从创建项目…...

Redis 和 Mysql 数据库数据如何保持一致性
Redis 和 Mysql 数据库数据如何保持一致性 保持Redis和MySQL数据库数据一致性是一个常见且重要的问题,特别是在使用Redis作为MySQL数据库的缓存层时。以下是几种常用的保证二者数据一致性的策略和方法: 双写一致性(同步更新)&…...