-
在现代 Web 开发中,性能优化是提升用户体验和降低服务器成本的核心环节。而在众多优化手段中,HTTP 缓存因其简单高效、效果显著,成为前端与后端开发者必须掌握的基础能力。合理的缓存策略不仅能大幅减少网络请求、加快页面加载速度,还能有效减轻源服务器负载。本文将系统讲解 HTTP 缓存的工作原理、核心头部字段、验证机制及实际应用策略,帮助开发者构建高性能的 Web 应用。一、HTTP 缓存的基本原理HTTP 缓存是指浏览器或其他中间代理(如 CDN)将服务器返回的响应内容临时存储,在后续相同请求中直接使用本地副本,而无需再次向源服务器发起完整请求。这种机制基于“内容在一段时间内不会频繁变化”的假设,适用于静态资源(如图片、CSS、JS)以及部分动态内容。HTTP 缓存分为两类:强缓存(Strong Cache):直接使用本地缓存,不与服务器通信。协商缓存(Revalidation Cache):向服务器确认缓存是否仍有效,若有效则返回 304 Not Modified,避免重复传输内容。整个流程由 HTTP 响应头中的特定字段控制,客户端根据这些指令决定如何处理缓存。二、强缓存:通过过期时间控制强缓存的核心在于设置资源的有效期,一旦在有效期内,浏览器将直接使用本地缓存,不会发送请求到服务器(地址栏回车或新标签页打开除外)。1. Cache-ControlCache-Control 是 HTTP/1.1 引入的标准头部,优先级高于旧的 Expires 字段。常用指令包括:max-age=<seconds>:指定资源在多少秒内有效Cache-Control: max-age=3600表示该资源在 1 小时内可被直接使用。public / private:public 表示响应可被任何缓存(包括 CDN、代理)存储private 表示仅用户浏览器可缓存,中间代理不得缓存(适用于含用户私有信息的内容)no-cache:不使用强缓存,但可使用协商缓存(每次需验证)no-store:禁止任何形式的缓存,敏感数据(如银行页面)应使用此指令2. ExpiresExpires 是 HTTP/1.0 的遗留字段,指定一个绝对过期时间(GMT 格式):Expires: Wed, 21 Nov 2025 10:00:00 GMT由于依赖客户端时间,易受时钟偏差影响,现代开发中应优先使用 Cache-Control: max-age。三、协商缓存:验证缓存有效性当强缓存过期后,浏览器会向服务器发起请求,但会携带缓存验证信息。服务器根据这些信息判断资源是否已更新,若未更新则返回 304 状态码,告知客户端继续使用本地缓存。协商缓存依赖两组头部字段:1. Last-Modified 与 If-Modified-Since服务器在首次响应中返回 Last-Modified,表示资源最后修改时间:Last-Modified: Mon, 18 Nov 2025 08:30:00 GMT后续请求中,浏览器自动添加 If-Modified-Since:If-Modified-Since: Mon, 18 Nov 2025 08:30:00 GMT服务器比较该时间与当前资源修改时间:若未修改,返回 304 Not Modified(无响应体)若已修改,返回 200 OK 及新内容局限性:若资源在 1 秒内多次修改,Last-Modified 无法精确识别变化。2. ETag 与 If-None-Match为解决上述问题,HTTP/1.1 引入了 ETag(Entity Tag),它是资源的唯一标识符(通常为内容哈希值):首次响应:ETag: "a1b2c3d4e5"后续请求:If-None-Match: "a1b2c3d4e5"服务器比对 ETag:相同 → 返回 304不同 → 返回 200 和新内容ETag 精度更高,但计算哈希可能带来 CPU 开销。对于静态文件,Web 服务器(如 Nginx)通常基于文件 inode 和修改时间生成弱 ETag(以 W/ 开头),兼顾效率与准确性。四、实际应用中的缓存策略1. 静态资源:长期强缓存 + 文件指纹对于 CSS、JS、图片等静态资源,推荐采用“永久缓存 + 内容哈希”的策略:构建时为文件名添加哈希值:app.a1b2c3.js设置 Cache-Control: max-age=31536000(1 年)当内容变更时,文件名随之改变,浏览器自动请求新资源此方案确保用户始终获取最新版本,同时最大化利用缓存。2. HTML 页面:短时效或协商缓存HTML 通常作为入口文件,内容可能频繁变化,不宜长期缓存。建议:设置 Cache-Control: no-cache,强制每次验证或使用较短的 max-age(如 60 秒)配合 must-revalidate3. API 接口:按需配置公共数据(如城市列表):可设置较长缓存时间用户私有数据:使用 private + 短 max-age 或 no-cache敏感操作(如支付结果):使用 no-store五、常见问题与注意事项强制刷新行为用户按下 Ctrl+F5(Windows)或 Cmd+Shift+R(Mac)时,浏览器会忽略缓存并发送带 Cache-Control: no-cache 的请求。CDN 缓存与源站缓存分离CDN 通常遵循自身的缓存规则,可能覆盖源站的 Cache-Control。需在 CDN 控制台单独配置缓存策略。Service Worker 的影响若使用 PWA 技术,Service Worker 可完全接管请求,此时 HTTP 缓存可能被绕过,需在 SW 脚本中显式处理缓存逻辑。避免缓存污染对包含用户身份信息的 URL(如 /api/profile?user=123),确保不同用户的响应不会被错误共享,可通过设置 private 或使用认证头隔离。六、结语HTTP 缓存机制是 Web 性能优化的基石之一。通过合理配置 Cache-Control、ETag 等头部字段,开发者可以在不改动业务逻辑的前提下,显著提升页面加载速度和系统吞吐量。然而,缓存也是一把双刃剑——配置不当可能导致用户看到过期内容或资源无法更新。因此,理解其工作原理,并结合项目特点制定清晰的缓存策略,是每个 Web 开发者必备的能力。在实践中,建议结合浏览器开发者工具的 Network 面板,实时观察缓存命中情况,持续优化缓存配置。
-
HTTP协议虽然我们说,应用层协议是我们程序猿自己定的.但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用.HTTP(超文本传输协议)就是其 中之一。在互联网世界中,HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如HTML文档)。 HTTP协议是客户端与服务器之间通信的基础。客户端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是一个无连接、无状态的协 议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。认识URL平时我们俗称的"网址"其实就是说的URL urlencode和urldecode像/?:等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现.比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义. 转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位 做一位,前面加上%,编码成%XY格式。如下图搜索C++中"+" 被转义成了"%2B" urldecode 就是urlencode的逆过程;在线编码工具:http://tool.chinaz.com/tools/urlencode.aspx选中其中的URL编码/解码模式,在输入C++后点击编码就能得到编码后的结果。 同理C%2B%2B点击解码就会得到C++HTTP协议请求与响应格式HTTP请求HTTP请求协议格式如下: HTTP请求由以下四部分组成:请求行:[请求方法]+[url]+[http版本]请求报头:请求的属性,这些属性都是以key: value的形式按行陈列的。空行:遇到空行表示请求报头结束。请求正文:请求正文允许为空字符串,如果请求正文存在,则在请求报头中会有一个Content-Length属性来标识请求正文的长度。其中,前面三部分是一般是HTTP协议自带的,是由HTTP协议自行设置的,而请求正文一般是用户的相关信息或数据,如果用户在请求时没有信息要上传给服务器,此时请求正文就为空字符串。代码如下class HttpRequest{public: HttpRequest() { } std::string Serialize() { return std::string(); } void ParseReqLine(std::string &reqline) { // GET / HTTP/1.1 std::stringstream ss(reqline); ss >> _method >> _uri >> _version; } bool Deserialize(std::string &reqstr) { // 1. 提取请求行 std::string reqline; bool res = Util::ReadOneLine(reqstr, &reqline, glinespace); LOG(LogLevel::DEBUG) << reqline; // 2. 对请求行进行反序列化 ParseReqLine(reqline); if (_uri == "/") _uri = webroot + _uri + homepage; // ./wwwroot/index.html else _uri = webroot + _uri; // ./wwwroot/a/b/c.html LOG(LogLevel::DEBUG) << "_method: " << _method; LOG(LogLevel::DEBUG) << "_uri: " << _uri; LOG(LogLevel::DEBUG) << "_version: " << _version; // ./wwwroot/XXX.YYY return true; } std::string Uri() { return _uri; } ~HttpRequest() { } private: std::string _method; // 请求方法 std::string _uri; // URI std::string _version; // HTTP版本 std::unordered_map<std::string, std::string> _headers; // 请求报头 std::string _blankline; // 空行 std::string _text; // 请求正文};AI写代码cpp运行HTTP响应HTTP响应由以下四部分组成:状态行:[http版本]+[状态码]+[状态码描述]响应报头:响应的属性,这些属性都是以key: value的形式按行陈列的。空行:遇到空行表示响应报头结束。响应正文:响应正文允许为空字符串,如果响应正文存在,则响应报头中会有一个Content-Length属性来标识响应正文的长度。比如服务器返回了一个html页面,那么这个html页面的内容就是在响应正文当中的。 代码如下:class HttpResponse{public: HttpResponse() : _blankline(glinespace), _version("HTTP/1.0") { } // 实现: 成熟的http,应答做序列化,不要依赖任何第三方库! std::string Serialize() { std::string status_line = _version + gspace + std::to_string(_code) + gspace + _desc + glinespace; std::string resp_header; for (auto &header : _headers) { std::string line = header.first + glinesep + header.second + glinespace; resp_header += line; } return status_line + resp_header + _blankline + _text; } void SetTargetFile(const std::string &target) { _targetfile = target; } void SetCode(int code) { _code = code; switch (_code) { case 200: _desc = "OK"; break; case 404: _desc = "Not Found"; break; default: break; } } bool MakeResponse() { bool res = Util::ReadFileContent(_targetfile, &_text); // 浏览器请求的资源,一定会存在吗?出错呢? if (!res) { SetCode(404); _targetfile=webroot+page_404; Util::ReadFileContent(_targetfile, &_text); } SetCode(200); return true; } bool Deserialize(std::string &reqstr) { return true; } ~HttpResponse() {} public: std::string _version; int _code; // 404 std::string _desc; // "Not Found" std::unordered_map<std::string, std::string> _headers; std::string _blankline; std::string _text; // 其他属性 std::string _targetfile;};AI写代码cpp运行Http类class Http{public: Http(uint16_t port) : tsvrp(std::make_unique<TcpServer>(port)) { } void HandlerHttpRquest(std::shared_ptr<Socket> &sock, InetAddr &client) { // 1. 接收HTTP请求数据 std::string httpreqstr; int n = sock->Recv(&httpreqstr); // 读取请求数据 if (n > 0) { // 2. 解析HTTP请求 HttpRequest req; req.Deserialize(httpreqstr); // 3. 生成HTTP响应 HttpResponse resp; resp.SetTargetFile(req.Uri()); // 设置目标文件路径 resp.MakeResponse(); // 读取文件内容或返回404 // 4. 发送响应 std::string response_str = resp.Serialize(); sock->Send(response_str); }} void Start() { tsvrp->Start([this](std::shared_ptr<Socket> &sock, InetAddr &client) { this->HandlerHttpRquest(sock, client); }); } ~Http() { } private: std::unique_ptr<TcpServer> tsvrp;};AI写代码cpp运行服务器代码#include "Http.hpp" //http portint main(int argc, char *argv[]){ if(argc != 2) { std::cout << "Usage: " << argv[0] << " port" << std::endl; exit(USAGE_ERR); } uint16_t port = std::stoi(argv[1]); std::unique_ptr<Http> httpsvr = std::make_unique<Http>(port); httpsvr->Start(); return 0;}AI写代码cpp运行http协议底层代码还是TCP socket,我们在服务器创建Http类的智能指针,并启动服务器在Start()函数中使用lambda表达式捕获类中的HandlerHttpRquest()在HandlerHttpRquest()中1. 接收HTTP请求数据当你在浏览器中输入网址(如 http://106.54.48.112:8080/index.html)并访问时,浏览器会通过 TCP 连接向你的服务器发送 HTTP 请求数据。你的服务器通过 sock->Recv()读取的正是浏览器发送的原始 HTTP 请求数据。2. 解析HTTP请求在HTTP请求类中实现的反序列化读取_method , _uri , _version,主要是获得uri这样就可以访问服务器上wwwroot目录下的资源。3. 生成HTTP响应在获得HTTP请求后,要告诉浏览器资源的路径即设置路径,然后完成响应。在 MakeResponse方法中调用Util::ReadFileContent(_targetfile, &_text)的目的是读取客户端请求的目标文件内容(106.54.48.112:8080/index.html),并将其存储到 HTTP 响应的 _text 成员变量中,以便后续通过 Serialize()方法将文件内容作为 HTTP 响应正文返回给浏览器4. 发送响应即把序列化后的字符串发给浏览器注:在请求与响应中要严格按照图片中的结构完成序列化,否则浏览器与服务器无法建立连接// 工具类 class Util{public: static bool ReadFileContent(const std::string &filename, std::string *out) { // version1 std::ifstream in(filename); if (!in.is_open()) { return false; } std::string line; while (std::getline(in, line)) { *out += line; } in.close(); return true; } static bool ReadOneLine(std::string &bigstr, std::string *out, const std::string &sep /*\r\n*/) { auto pos = bigstr.find(sep); if (pos == std::string::npos) return false; *out = bigstr.substr(0, pos); bigstr.erase(0, pos + sep.size()); return true; } static int FileSize(const std::string &filename) { std::ifstream in(filename, std::ios::binary); if (!in.is_open()) return -1; in.seekg(0, in.end); int filesize = in.tellg(); in.seekg(0, in.beg); in.close(); return filesize; }};AI写代码cpp运行index.html以ai帮我们完成网址首页为例<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Default Home Page</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; color: #333; } header { background-color: #007bff; color: #fff; padding: 10px 20px; text-align: center; } nav { background-color: #343a40; padding: 10px 0; } nav a { color: #fff; text-decoration: none; padding: 10px 20px; display: inline-block; } nav a:hover { background-color: #5a6268; } .container { padding: 20px; } .welcome { text-align: center; margin-bottom: 20px; } .welcome h1 { margin: 0; } .content { background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } footer { background-color: #343a40; color: #fff; text-align: center; padding: 10px 0; position: fixed; width: 100%; bottom: 0; } </style></head><body> <header> <h1>Welcome to Our Website</h1> </header> <nav> <a href="#">Home</a> <a href="Login.html">Login</a> <!-- 跳转到登录页面 --> <a href="Register.html">Register</a> <!-- 跳转到注册页面 --> <a href="#">About</a> <a href="#">Contact</a> </nav> <div class="container"> <div class="welcome"> <h1>Welcome to Our Default Home Page</h1> <p>This is a simple default home page template.</p> </div> <div class="content"> <h2>Introduction</h2> <p>This is a basic HTML template for a default home page. It includes a header, navigation bar, a welcome section, and a content area. You can customize this template to suit your needs.</p> </div> </div> <footer> <p>© 2025 Your Company Name. All rights reserved.</p> </footer></body></html>AI写代码cpp运行代码效果服务器日志的消息 浏览器输入服务器ip+端口号 网址默认首页 HTTP的方法HTTP常见的方法如下:方法说明支持的HTTP协议版本GET获取资源1.0、1.1POST传输实体主体1.0、1.1PUT传输文件1.0、1.1HEAD获得报文首部1.0、1.1DELETE删除文件1.0、1.1OPTIONS询问支持的方法1.1TRACE追踪路径1.1CONNECT要求用隧道协议连接代理1.1LINK建立和资源之间的联系1.0UNLINE断开连接关系1.0其中最常用的就是GET方法和POST方法。GET方法和POST方法GET方法一般用于获取某种资源信息,而POST方法一般用于将数据上传给服务器。但实际我们上传数据时也有可能使用GET方法,比如百度提交数据时实际使用的就是GET方法。GET方法和POST方法都可以带参:GET方法是通过url传参的。POST方法是通过正文传参的。从GET方法和POST方法的传参形式可以看出,POST方法能传递更多的参数,因为url的长度是有限制的,POST方法通过正文传参就可以携带更多的数据。此外,使用POST方法传参更加私密,因为POST方法不会将你的参数回显到url当中,此时也就不会被别人轻易看到。不能说POST方法比GET方法更安全,因为POST方法和GET方法实际都不安全,要做到安全只能通过加密来完成HTTP的状态码HTTP的状态码如下:类别 分类 原因短语1XX Informational(信息性状态码) 接收的请求正在处理2XX Success(成功状态码) 请求正常处理完毕3XX Redirection(重定向状态码) 需要进行附加操作以完成请求4XX Client Error(客户端错误状态码) 服务器无法处理请求5XX Server Error(服务器错误状态码) 服务器处理请求出错最常见的状态码,比如200(OK),404(Not Found),403(Forbidden请求权限不够),302(Redirect),504(Bad Gateway)。Redirection(重定向状态码)重定向就是通过各种方法将各种网络请求重新定个方向转到其它位置,此时这个服务器相当于提供了一个引路的服务。重定向又可分为临时重定向和永久重定向,其中状态码301表示的就是永久重定向,而状态码302和307表示的是临时重定向。临时重定向和永久重定向本质是影响客户端的标签,决定客户端是否需要更新目标地址。如果某个网站是永久重定向,那么第一次访问该网站时由浏览器帮你进行重定向,但后续再访问该网站时就不需要浏览器再进行重定向了,此时你访问的直接就是重定向后的网站。而如果某个网站是临时重定向,那么每次访问该网站时如果需要进行重定向,都需要浏览器来帮我们完成重定向跳转到目标网站。临时重定向演示进行临时重定向时需要用到Location字段,Location字段是HTTP报头当中的一个属性信息,该字段表明了你所要重定向到的目标网站。我们这里要演示临时重定向,可以将HTTP响应当中的状态码改为302,然后跟上对应的状态码描述,此外,还需要在HTTP响应报头当中添加Location字段,这个Location后面跟的就是你需要重定向到的网页,比如我们这里将其设置为qq的首页。代码如下class HttpResponse{public: HttpResponse() : _blankline(glinespace), _version("HTTP/1.0") { } void SetCode(int code) { _code = code; switch (_code) { case 200: _desc = "OK"; break; case 404: _desc = "Not Found"; break; case 302: _desc = "See Other"; break; default: break; } } void SetHeader(const std::string &key, const std::string &value) { auto iter = _headers.find(key); if (iter != _headers.end()) return; _headers.insert(std::make_pair(key, value)); } bool MakeResponse() { if (_targetfile == "./wwwroot/redir_test") { SetCode(302); SetHeader("Location", "https://www.qq.com/"); return true; } bool res = Util::ReadFileContent(_targetfile, &_text); // 浏览器请求的资源,一定会存在吗?出错呢? if (!res) { SetCode(404); _targetfile = webroot + page_404; Util::ReadFileContent(_targetfile, &_text); } SetCode(200); return true; } ~HttpResponse() {} public: std::string _version; int _code; // 404 std::string _desc; // "Not Found" std::unordered_map<std::string, std::string> _headers; std::string _blankline; std::string _text; // 其他属性 std::string _targetfile;};在浏览器输入106.54.48.112:8080/redir_test就会自动跳转到qq的首页 上述操作中是浏览器的底层根据Location自己定位网址的。HTTP常见的HeaderHTTP常见的Header如下:Content-Type:数据类型(text/html等)。Content-Length:正文的长度。Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上。User-Agent:声明用户的操作系统和浏览器的版本信息。Referer:当前页面是哪个页面跳转过来的。Location:搭配3XX状态码使用,告诉客户端接下来要去哪里访问。Cookie:用于在客户端存储少量信息,通常用于实现会话(session)的功能。———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/jingfeng514/article/details/151315040
-
HTTPS 的优点HTTPS能够取代HTTP,主要是因为HTTPS在HTTP的基础上增加了安全性,提供了更加安全的数据传输方式。以下是HTTPS相较于HTTP的主要优势:数据安全性:HTTPS使用加密算法(如SSL/TLS)对传输的数据进行加密,保护数据在传输过程中不被窃取和篡改。这一特点使得HTTPS在数据安全性上大大优于HTTP,因为HTTP的数据传输是明文的,容易被黑客截获和篡改。身份认证:HTTPS通过证书验证服务器身份,确保用户与正规服务器建立连接,防止恶意伪造网站。这种身份认证机制有效避免了钓鱼网站和假冒网站的出现,增加了网络使用的安全性。完整性保护:HTTPS使用数字签名来检测数据是否被篡改,保证数据的完整性。即使数据在传输过程中被截获,攻击者也无法篡改数据而不被检测到。更高的搜索引擎排名:搜索引擎更倾向于显示使用HTTPS的网站,因为HTTPS提供更安全和可信的用户体验。这有助于提升网站的可见性和信誉。关于发送同样的网页数据量,HTTPS相较于HTTP会增加一定的数据量,因为HTTPS需要传输额外的加密和验证信息。然而,这种增加通常很小,一般不会对网络性能造成显著影响。具体的增加量取决于使用的加密算法和密钥长度等因素,但通常不会超过原始数据量的几个百分点。HTTPS证书不可信任可能的原因至于有些网址会提示证书不可信任,这通常是由以下几个原因造成的:证书已过期:网站的SSL/TLS证书有一个有效期限,如果证书已过期,浏览器将不再信任该证书。证书颁发机构不受信任:浏览器内置了一份受信任的证书颁发机构列表,如果网站的证书是由一个不在此列表中的机构颁发的,浏览器将不信任该证书。证书链不完整:SSL/TLS证书通常包含一个证书链,用于证明证书的有效性。如果证书链中的某个环节缺失或损坏,浏览器将无法验证证书的有效性。域名不匹配:如果证书中的域名与实际访问的域名不匹配,浏览器将认为证书无效。在解决证书不可信任的问题时,网站管理员应该检查证书的有效期、颁发机构、证书链和域名等信息,确保所有信息都正确无误。同时,用户也可以尝试更新浏览器或操作系统,以获取最新的受信任证书颁发机构列表。
-
一、Gworg申请SSL证书,国内网站一般用DV单域名。淘宝申请地址:cid:link_1图文教程:https://www.gworg.com/ssl/1384.html提交域名,付款后,很快就会收到解析说明二、登录华为云——云解析(如果域名在其它地方注册的,请进入对应的提供商地方管理域名)三、添加记录集页面快速访问地址(红色区域改成自己的域名就可以进入面板)https://console.huaweicloud.com/dns/?region=cn-north-4#/dns/publicRset?zoneid=8aace3b97c27b313017c91699c3f16ea&zonename=gworg.com.&zoneStatus=ACTIVE解析特别注意有特殊符号,值:"c31a75070bbd54c8a44593b9914c4a27fa0d891a63f4aea799ca07f709d4db8e"大约等待1-15分钟就可以拿到SSL证书,进入邮箱下载证书。四、配置云速建站1、邮件证书解压后选择:Nginx文件夹2、选择:后台管理选3、择绑定域名4、添加SSL证书注意:续费或更新SSL证书,可以点击删除证书或者点击更新证书后配置。5、选择对应的文件,右击打开方式将代码全部复制到对应的框内。1_gworg.com_bundle.crt(证书内容,包括中间证书)2_gworg.com.key(key内容)6、代码复制到对应框内,点击:确定。如果存在其它域名也相同操作。7、最后点击:确定生效时间:华为云云速建站配置完毕后,至少等待30分钟后生效,访问者需要清空浏览器记录访问。
-
PC根据文档可以下载根据文档这里格式不知道有没有错,下面第一个红色框是请求红色是发送的,绿色是接收,不明白400错误那里怎么解决,我用的ESP8266透传,已经接上了https 443接口
yd_247833416
发表于2024-03-11 23:57:58
2024-03-11 23:57:58
最后回复
yd_237139617
2025-03-17 09:32:19
229 10 -
一、短链接的起源短链接是一种将长URL转换为短、简洁的网址的技术。它的起源可以追溯到互联网发展的早期,当时长URL的使用给用户带来了繁琐和不便。为了解决这个问题,短链接技术应运而生。短链接 | 一个覆盖广泛主题工具的高效在线平台(amd794.com)cid:link_0二、短链接解决了什么问题短链接的主要目的是解决长URL带来的繁琐和不便。长URL不仅难以记忆和分享,而且在某些场景下可能会被截断或破坏。短链接通过将长URL转换为短、简洁的网址,使得用户可以更方便地分享和访问链接。三、短链接对现在的影响和作用链接分享:短链接在社交媒体和移动设备上的广泛应用,使得用户可以更轻松地分享链接。短链接不仅节省了字符空间,还可以提高链接的可读性和美观性。链接跟踪:短链接技术还可以用于链接跟踪和分析。通过在短链接中添加跟踪参数,可以追踪链接的点击量、来源和转化率等数据,为营销和分析提供有价值的信息。链接管理:短链接可以简化链接管理的流程。通过使用短链接服务,用户可以轻松地创建、编辑和管理大量的链接,提高链接管理的效率和便利性。链接安全:短链接技术可以提高链接的安全性。短链接服务通常会提供链接验证和防止恶意链接的功能,保护用户免受恶意网站和钓鱼攻击的威胁。四、短链接的应用领域社交媒体:短链接在社交媒体平台上被广泛应用,方便用户分享和点击链接,同时提供链接跟踪和分析的功能。移动应用:短链接在移动应用中用于分享和打开链接,可以提高用户体验和链接的可用性。营销活动:短链接在营销活动中起到重要作用,可以追踪链接的点击量和转化率,帮助营销人员评估活动效果。链接管理工具:短链接服务可以用于链接管理工具,帮助用户创建、编辑和管理大量的链接。五、总结短链接技术的诞生解决了长URL带来的繁琐和不便,对互联网用户的链接分享和访问带来了便利。短链接在社交媒体、移动应用、营销活动和链接管理等方面发挥着重要作用。同时,短链接技术还提供了链接跟踪和分析的功能,帮助用户评估链接的效果和营销活动的效果。随着互联网的发展,短链接技术仍然在不断创新和发展,为用户提供更便捷、安全和高效的链接管理和分享体验。转载自https://www.cnblogs.com/Amd794/p/18034385
-
http代理:最常用的代理配置,可以解决负载均衡,容灾等问题;https代理:安全的http代理,对于安全性要求比较高,需要配置证书;ws代理:WS表示websocket服务,指的是长连接,Nginx配置WebSocket也比较简单只需要加上配置项: proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; wss代理:WSS表示WebSocket + Https,就是安全的WebSocket,配置和ws服务一样,只需要在https代理加上配置项: proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; 配置文件如下,其中localhost值不能重复,配置项参考https://www.runoob.com/w3cnote/nginx-setup-intro.html: server { listen 8088; server_name localhost; //配置ssl证书,证书生产命令 openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout test.key -out test.crt ssl_certificate "test.crt"; ssl_certificate_key "test.key"; ssl_ecdh_curve X25519:X448; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.3 TLSv1.2; ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384"; // 开启ssl认证,若不开启,https、wss认证不生效 ssl_prefer_server_ciphers on; // 配置https代理,需要开启ssl认证开关 location /{ proxy_pass https://xxx.xxx.xxx.xxx:****; } // 配置http代理 location / { proxy_pass http://xxx.xxx.xxx.xxx:****; } // 配置wss代理,需要开启ssl认证开关 location /{ proxy_pass https://xxx.xxx.xxx.xxx:****; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } // 配置ws代理 location / { proxy_pass http://xxx.xxx.xxx.xxx:****; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } }}
-
地图属性选中地图组件,单击配置属性、数据、事件。图1 地图属性页面地图属性参数说明如表2所示。表2 地图组件属性设置页面参数说明区域参数名说明属性组件标题地图组件名称该Widget名称。边框边框样式,是整体显示边框或者四角显示边框。背景/样式背景样式。背景/图片链接背景图片URL。背景/颜色背景颜色。数据Connector - ScatterDataConnector当需要在地图上显示散点图时,则配置该桥接器。单击该桥接器后的,在“桥接器”窗口配置如下参数,为地图提供散点图的数据源。桥接器名称:调用的桥接器名称,从下拉框选择系统提供的预置桥接器。系统预置的桥接器可在APP开发界面左侧列表单击,选择“高级页面>桥接器”,在“全局”页签进行查找并下载查看桥接器包中内容。调用周期(秒):每隔多少秒调用一次后台接口,默认配置为“0”,表示只调用一次后台接口。URL:调用后台接口的URL,该接口实现为地图提供散点图的数据源,您可通过服务编排进行实现。用于在地图初始化时,接收Custom API传来的数据,将其转化为ScatterDataViewModel定义的数据模型,在地图上绘制echarts散点图。ScatterDataViewModel定义的数据模型,与地图组件Action中“画散点图refreshScatter Action”所定义的模型一致。详细参数请参见ScatterDataConnector。Connector - AlarmDataConnector当需要在地图上显示告警信息时,则单击该桥接器后的进行配置,为地图提供告警的WebSocket数据源。用于在使用地图过程中,侦听web socket上报的消息数据,将其转化为AlarmDataViewModel定义的数据模型,在地图上添加或清除覆盖物。例如火警告警被触发后,web socket侦听到上报消息,会自动触发地图组件对AlarmDataConnector的调用,添加告警窗口可以用添加信息窗体来实现。AlarmDataViewModel定义的数据模型,与地图组件Action中“在地图上添加或清除覆盖物addMarkerElements Action”所定义的模型一致,详细参数请参见AlarmDataConnector。Connector - SC_OverlaysDataConnector用于在地图初始化时,接收Custom API传来的数据,将其转化为OverlaysDataViewModel定义的数据模型,为地图添加或清除覆盖物。OverlaysDataViewModel定义的数据模型,与地图组件Action中“在地图上添加或清除覆盖物addMarkerElements Action”所定义的模型一致,详细参数请参见SC_OverlaysDataConnector。Connector - MapConfigDataConnector当需要从外部控制地图的类型、中心点、缩放级别等配置时,则单击该桥接器后的进行配置,为地图提供初始化配置数据的数据源。用于在地图初始化时,接收Custom API传来的数据,将其转化为MapConfigDataViewModel定义的数据模型,用于改变地图初始化时的配置,详细参数请参见SC_MapConfigDataConnector。API POST Connector查询地图配置。当使用伟岸纵横/超图/中地数码地图时,必须配置该参数。当使用百度/谷歌/高德地图时,不需要配置该参数。事件markerElementSelection单击地图上的某个marker,地图外发一个带marker详细信息的事件。marker详细信息的Object,内容取决于添加marker时传入的详细信息,如:"element":{ "height": 24, "heightSelected": 32, "id": "elevator002", "image": "/images/elevator001.png", "imageSelected": "/images/elevator005.png", "label": { "offset": [5, -25], "text": "电梯002" }, "position": [114.05822932720184, 22.656630277633667], "tag": {}, "title": "电梯002", "width": 24, "widthSelected": 32, "mapSideId": "111" }scatterPointSelection单击散点图中的某个点,地图外发一个被单击的点详细信息的事件。输出参数如下:eventType:必选,String类型,表示当前触发的事件类型:click。callback:必选,String类型,表示事件触发后的回调函数名称,或任意唯一标示符。echartsData:必选,Object类型,被单击的点详细信息,取决于画点时传入的信息。zoomTheMap缩放地图,地图外发一个带缩放信息的事件。输出参数如下:zoom:必选,Number类型,表示地图显示的缩放级别(1~22)。center:必选,Array类型,表示地图中心点经纬度坐标值,如[经度,纬度],使用GPS(WGS-84)坐标系。clickTheMap单击地图上某个位置,地图外发一个带位置信息的事件。输出参数如下:lng:必选,Number类型,表示单击位置的地图经度。lat:必选,Number类型,表示单击位置的地图纬度。buildingId:可选,String类型,表示单击位置的室内楼栋ID。floorId:可选,String类型,表示单击位置的室内楼层ID。frameOnEnd打开地图框选控件,进行框选,框选结束后,地图外发框选到的marker和热力点信息列表。输出参数:markers:可选,Array类型,表示markers列表,包含addMarker/addFlashMarekr/addClusterMarker接口添加marker时传入的marker信息。heatPoints:可选,Array类型,表示热力点列表,包含showHeatMap接口画热力图时传入的热力点信息。地图Action选中地图组件,单击配置属性,选择“事件”可创建新组件事件,或者编辑已有的事件操作。图2 编辑事件操作地图事件操作如表3所示。表3 地图组件Action操作Action名称说明画散点图Refresh Scatter在地图上画echarts散点图。在地图上添加或清除覆盖物Add Marker Elements在地图上添加某种类型的覆盖物(图标、闪烁图标、信息窗体、折线实际路径、规划后的路径、热力图、圆、折线),或清除所有覆盖物清除某类或某个覆盖物Clear Overlays By Condition根据传入的id或type,清除地图上覆盖物。定位地图上某个覆盖物Locate Element找到地图上某个指定的图标,并触发图标点击事件。修改地图配置数据Modify Map Configuration地图使用过程中,对地图的某些属性进行修改。
-
恭喜获奖的各位开发者请大家在5月31日前点击下方链接填写获奖信息我们会在截至日期结束之后尽快给您邮礼品如您逾期没有填写,视为主动放弃奖励,望周知。获奖信息填写链接:【14天代码重构实战营用户体验及奖品邮寄信息登记问卷】活动已结束,获奖名单如下所示,公示5天公示期结束后(5月23日)获奖者可在本帖填写奖品邮寄信息收集问卷。公示期:5月18日-5月22日抽奖说明:此次14天代码重构实战营活动打卡情况统计如下:完成14天打卡用户人数42人完成7天打卡用户人数60人完成3天打卡用户人数66人完成1天打卡用户人数105人为保证公平性,3/7/14天连续打卡用户不可重复中奖,故每轮抽奖将剔除上一轮已获奖者再进行抽奖。即如果完成14天打卡的用户在14天打卡抽奖轮次中未中奖,在7天或3天打卡抽奖中可能会中奖,同理7天打卡用户也是哦!抽奖资格名单详见公示帖:【打卡信息公布】14天代码重构课程打卡名单公示 奖品及中奖概率:(1)完成第1天打卡,每人可获得500码豆,码豆最多发放20万,数量有限先到先得。(2)连续完成3天打卡可获得抽奖机会,奖品为三合一数据线,奖品数量上限为30份,中奖概率(≤100%)为“30/完成连续打卡3天任务的总人数”。(3)连续完成7天打卡可获得抽奖机会,奖品为手持风扇,奖品数量上限为10份,中奖概率(≤100%)为“10/完成连续打卡7天任务的总人数”。(4)连续完成14天打卡可获得抽奖机会,奖品为华为智选 海雀AI全景摄像头,奖品数量上限为3份,中奖概率(≤100%)为“3/完成连续打卡14天任务的总人数”。本次活动幸运奖将采用巨公摇号平台(https://www.jugong.wang/random-portal/)进行抽取,相关奖项将由华为云社区工作人员进行评选,如您对评奖方式有异议,请勿参加本次活动。中奖名单如下:14天代码重构实战营每日打卡中奖用户名单序号论坛昵称微信昵称奖项奖品1yd_250130253你**像谁连续14天打卡中奖华为智选 海雀AI全景摄像头2yd_262803835L** Equinox;连续14天打卡中奖华为智选 海雀AI全景摄像头3iolink1002汪**_^*连续14天打卡中奖华为智选 海雀AI全景摄像头4xiaxy **益连续7天打卡中奖手持风扇5guoky1894159小**连续7天打卡中奖手持风扇6jkzx6181秋*连续7天打卡中奖手持风扇7nukinsan八*连续7天打卡中奖手持风扇8malik程*连续7天打卡中奖手持风扇9guokuiyongq**ngzong连续7天打卡中奖手持风扇10thunder95t**nder95连续7天打卡中奖手持风扇11蓝晶冰玉如**黎不快樂连续7天打卡中奖手持风扇12emptyBoxe**tyBox连续7天打卡中奖手持风扇13zyw13019809851蜜**贝连续7天打卡中奖手持风扇14over_wzl若**连续3天打卡中奖数据线15cloud昵称bbs噫**连续3天打卡中奖数据线16anjianjuguo张**连续3天打卡中奖数据线17夏暖夏*连续3天打卡中奖数据线18@Wu小**连续3天打卡中奖数据线19蓝瘦的蜕变 **的蜕变连续3天打卡中奖数据线20yd_249618787V**tor连续3天打卡中奖数据线21y-wolfandy **连续3天打卡中奖数据线22小糖饼最甜呀小**最甜呀连续3天打卡中奖数据线23yd_292192128s**201连续3天打卡中奖数据线24yd_245482223李**连续3天打卡中奖数据线25sunofprovence麦**斯基连续3天打卡中奖数据线26微笑倾城 **琼连续3天打卡中奖数据线27yiu-pengY** Peng连续3天打卡中奖数据线28Archivez**连续3天打卡中奖数据线29剑雨乞**扎罗之狼连续3天打卡中奖数据线30yd_242852651小*连续3天打卡中奖数据线31yd_219118993A**ition连续3天打卡中奖数据线32jamesricadoj**esricado连续3天打卡中奖数据线33yd_239085618勇**连续3天打卡中奖数据线34yd_296252717M**LIONS连续3天打卡中奖数据线35John2021。**连续3天打卡中奖数据线36liuyan151415787S**shine连续3天打卡中奖数据线37tangd158415252z**ngy连续3天打卡中奖数据线38walkwikiw**k连续3天打卡中奖数据线39ws15041591187爽*连续3天打卡中奖数据线40湬黍湬*连续3天打卡中奖数据线41小小2018@**连续3天打卡中奖数据线42real joj*连续3天打卡中奖数据线43小强鼓掌小**掌连续3天打卡中奖数据线44abcabc敏*连续1天打卡中奖500码豆45Ania小*连续1天打卡中奖500码豆46cftangc**ang连续1天打卡中奖500码豆47HW_fight一**是有24小时的啊连续1天打卡中奖500码豆48i进击的攻城狮肥**连续1天打卡中奖500码豆49UMRD**Kenny_66连续1天打卡中奖500码豆50yc-chen风*连续1天打卡中奖500码豆51yd_223645057 **ranger连续1天打卡中奖500码豆52yd_225846754学*连续1天打卡中奖500码豆53yd_48903315没**出何来收获连续1天打卡中奖500码豆54zekelovez**e连续1天打卡中奖500码豆55氟西汀损**连续1天打卡中奖500码豆56咖啡18源*连续1天打卡中奖500码豆57蜡笔不辣C**tS连续1天打卡中奖500码豆58禄仁恝禄**连续1天打卡中奖500码豆59孙小北孙**连续1天打卡中奖500码豆60这个地方是昵称l**连续1天打卡中奖500码豆61郭kuiyong郭**连续1天打卡中奖500码豆62毛毛猫w**连续1天打卡中奖500码豆63yd_268237893桀**连续1天打卡中奖500码豆64zhengguixiang郑**连续1天打卡中奖500码豆65dyxzhang等**连续1天打卡中奖500码豆66晴空1晴**连续1天打卡中奖500码豆67张辉张**连续1天打卡中奖500码豆68@AA**连续1天打卡中奖500码豆69305佳3**佳连续1天打卡中奖500码豆70Ara~追着风跑**连续1天打卡中奖500码豆71ballew**r连续1天打卡中奖500码豆72CocoLiu2020C**oLiu2020连续1天打卡中奖500码豆73Flyfoodf**food连续1天打卡中奖500码豆74lzhusS**0000连续1天打卡中奖500码豆75testName茶**连续1天打卡中奖500码豆76wq765416999@**连续1天打卡中奖500码豆77x19x**连续1天打卡中奖500码豆78yd_223290172李**连续1天打卡中奖500码豆79yd_228128715静**连续1天打卡中奖500码豆80yd_234565682热**朝阳群众连续1天打卡中奖500码豆81yd_242476272晓**月连续1天打卡中奖500码豆82yd_244993104流**记忆连续1天打卡中奖500码豆83yd_245236253c**n连续1天打卡中奖500码豆84yd_245439936浮**连续1天打卡中奖500码豆85yd_247861458高**C连续1天打卡中奖500码豆86yd_2493474210**连续1天打卡中奖500码豆87yd_259794023小**连续1天打卡中奖500码豆88yd_262076836q**连续1天打卡中奖500码豆89yd_269703752星**背影连续1天打卡中奖500码豆90yd_274792310W**JIANG连续1天打卡中奖500码豆91yd_288144557小**连续1天打卡中奖500码豆92yd_292318528可**连续1天打卡中奖500码豆93yd_296177002落**连续1天打卡中奖500码豆94yuebaoy**bao连续1天打卡中奖500码豆95yuhuashi晴**iddot;莫冰落连续1天打卡中奖500码豆96yzq13516078375郑**连续1天打卡中奖500码豆97禅大师j**sylcljhsdty连续1天打卡中奖500码豆98嘲风S**ler连续1天打卡中奖500码豆99从大数据到人工智能真**连续1天打卡中奖500码豆100胡琦胡**连续1天打卡中奖500码豆101江佐月袁**连续1天打卡中奖500码豆102冷月欧皇l**edwar连续1天打卡中奖500码豆103舍会~你文哥*连续1天打卡中奖500码豆104腾腾**连续1天打卡中奖500码豆105新手上路001自**在轻轻松松的自由呼吸连续1天打卡中奖500码豆恭喜以上开发者,相关获奖名单信息和抽奖过程也可下载附件查看。公示5天,公示期结束后(5月22日)获奖者可在本帖填写奖品邮寄信息收集问卷。如有异议请联系华为云小助手01沟通。活动规则详见:https://bbs.huaweicloud.com/forum/thread-184761-1-1.html
-
如题,我无法使用https clone我的代码我输入用户名是 tiixab/tiixab密码也是我的登陆密码,但是报错remote: 用户名或密码错误,请输入正确的用户名[账户名/用户名]和密码!remote: 具体可以点击 代码托管首页-设置我的HTTPS密码 查看remote: 如果您设置了凭证管理[credential.helper], 请先清理.我没法重置我的https密码,邮件三天后可用没有十年脑血栓想不出来这种操作好吧
-
目录-1 鲲鹏KAE加速 -1.1 BES集成KAE加速器原理 -1.2 BES使用KAE配置说明 -1.2.1 开启https -1.2.2 选择SSL引擎为OpenSSL -1.2.3 KAE安装和配置 -1.2.4 BES配置长连接和短链接 -1.2.5 判断KAE加速器是否生效1 鲲鹏KAE加速 KAE加速引擎是鲲鹏应用使能套件BoostKit的基础加速能力,包含加解密、压缩/解压缩等模块。通过KAE加速HTTPS的RSA握手能大幅提升中间件处理HTTPS连接的性能。在启用KAE硬件license后,BES可以充分发挥硬件加速的能力。1.1 BES集成KAE加速器原理 BES通过JNI方式调用KAE加速库完成HTTPS握手和通信。1.2 BES使用KAE配置说明 1.2.1 开启https 1.2.2 选择SSL引擎为OpenSSL 1.2.3 KAE安装和配置 KAE安装和配置参考华为云官网:https://support.huaweicloud.com/devg-kunpengaccel/kunpengaccel_16_0007.html 1.2.4 BES配置长连接和短链接 长连接:长连接最大请求数配置为-1,表示不限制连接处理的http请求数 短链接:长连接最大请求数配置为1,表示处理一个请求之后断开连接 1.2.5 判断KAE加速器是否生效cat /sys/class/uacce/hisi_*/attrs/available_instances 为确保正确使能KAE引擎,压测过程中查看可以查看上述队列数据是否变化,未生效时,全部是256,生效时,有一些变成小于256。
-
【功能模块】LiveData-->函数API开发【操作步骤&问题现象】在函数API中调用南向系统的接口,请求地址是https的,一直不通原因分析:1.南向系统需要添加ROAM服务白名单,已添加2.请求时需忽略https证书校验,已忽略(https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=180222)请协助排查,13259109371,比较紧急。【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
网络安全一直是IT行业最为关注的话题,Java之父James Gosling曾在采访中表示“目前,我们依然有各种各样的安全问题,网络攻击不断,如果有一种方式,可以终结网络安全隐患,那将是非常好的。”在众多的操作系统中,Linux算是比较安全的,前提是你在服务器或云端上正确的安装了Linux,并且给它提供了一定的防护。尽管这样,也无法百分百保证它不面临安全威胁。VMware威胁分析部门(TAU)在其最新威胁报告中,就Linux多云环境下的恶意软件进行了详细探讨。图片来源VMware我们都知道,Linux是世界范围内的顶级云操作系统,它为人们常用网站中超过78%的网站提供支持。黑客们都是聪明人,他们也知道针对云计算的批发要比针对Windows PC零售能赚取更多的钱。因此,黑客们把更多的精力放在了脆弱的基于Linux的多云环境上。 图片来源W^3Techs破解基于Linux的多云环境虽然破解基于Linux的多云环境很困难,但成功破解后的可观收益驱使着黑客们投入更多的精力。通常,利用破解工具来攻击基于Linux的多云环境基本是不可能完成的。但他们可以针对基于容器的基础设施中那些脆弱的认证、漏洞以及错误配置,利用远程访问工具(RATs)渗透到云环境中。一旦他们在你的云中有了一个立足点,就会尝试运行勒索软件或是部署加密组件,而这一切的目的都是为了钱。日渐复杂的勒索软件工具VMware表示,由于自己之前一直没有专注于检测这些威胁,导致Linux的恶意软件检测和预防工具长时间没有过更新。这意味着,现有的工具已经不能胜任检测与预防威胁这项工作了。而检测与预防工具的落后,却要面对更加复杂的基于Linux系统而制作的勒索软件,这些勒索软件现在的安全威胁等级更高,而且更难查找。例如,现在针对Linux的勒索软件有些已经发展到针对主机图像的地步,而想要找到这些恶意软件需要开启动态分析和主机监控。这意味着如果你的计算机中真的存在这种勒索软件,你很难清楚的知道它带来的影响。现在有不少于9个勒索软件家族在针对Linux。其中包括REvil的Linux版本;DarkSide;BlackMatter以及Defray777等。其中有几个是提供给那些没什么技术但是想赚点快钱的人的。这些人也可以通过这些勒索软件来找受害者要赎金。逍遥法外的加密劫持者加密劫持者是未经授权使用他人计算机来挖矿加密货币的人的称呼。一般加密劫持者选择的加密货币是Monero加密货币(XMR)。89%的Linux加密劫持者使用的都是XMRig的相关库。这些劫持者主要使用两种方法来达到目的。其一是利用具有窃取钱包功能的恶意软件,有时也会将恶意软件冒充为基于加密货币的应用程序。其二就是利用偷来的CPU周期挖掘加密货币。无论是那种方式,挖掘加密货币的代码都是在后台运行的,因此毫无戒心的受害者是不会发现有人在使用自的计算机挖加密货币的,他们只是会好奇自己的计算机为什么运行性能降低了,程序执行也比以前滞后。目前有7个恶意软件家族在这方面针对Linux,包括XMRig、Sysrv和Mexalz等。除了针对Linux多云环境的攻击,还有许多专门针对常见的云计算配置的攻击。例如,TeamTNT的恶意软件制作者针对开放的Kubernetes pods和Docker来部署XMRig加密软件。为了逃避对恶意软件的检测,它劫持了数据库加载机制,以此隐藏在/proc文件系统的特定目录中,从而隐藏加密器的进程。为了使自己的恶意软件能够进入到受害者的系统中,这些勒索软件的开发者中,越来越多的人使用RATs。VMware的研究团队发现,自2020年2月底以来,互联网上有超过14000个活跃的Cobalt Strike团队服务器。这个Red Team的软件是为了帮助你保护你的系统,但现在有约56%的Cobalt Strike服务器被破解了或是早就已经泄露了的Cobalt Strike实例。可以说其中大部分已经被这帮黑客利用了。网络安全近几年真的是令人头疼的问题,为了避免重蹈Apache Log4j这类开源安全问题,谷歌提出了三项安全倡议。现在VMware也发布了这篇文章来提醒你,保护好你的Linux。面对这些安全威胁,我们能做的就是给自己的计算机周全的防护。参考链接:VMware Finds Linux Malware on the Rise – The New Stack————————————————版权声明:本文为CSDN博主「、左耳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_43529978/article/details/122964991
-
项目做国际化,经常出现中英文混合,无法解决。有使用了Edge网关。本地 测试 生产 HttpServerFilter获取不到query,无法拿到queryParam中lang参数(第一处打印为null)。后来在edge中handler中加 invocation.addContext("lang", langStr); 在测试环境可以获取到(第二处有打印),但在测试 生产 获取不到。设置语言是通过一个接口设置的,代码类似上面if里面的。整体没有问题,但在连续多次切换中英文时会发生混乱。有大佬遇到这种情况吗?求助大佬能指点一下。
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签