郑州市网站建设公司石河子规划建设局网站

news/2025/9/25 17:10:55/文章来源:
郑州市网站建设公司,石河子规划建设局网站,jsp网站项目,温州网站搭建文章目录 #x1f4d6; 前言1. 认识URL 引入http协议2. http协议格式2.1 宏观格式#xff1a;2.2 实验演示#xff1a; 3. http的方法3.1 GET方法#xff1a;3.2 POST方法#xff1a;3.3 GET vs POST#xff1a; 4. HTTP的报头和状态码5. http的cookie5.1 htt… 文章目录 前言1. 认识URL 引入http协议2. http协议格式2.1 宏观格式2.2 实验演示 3. http的方法3.1 GET方法3.2 POST方法3.3 GET vs POST 4. HTTP的报头和状态码5. http的cookie5.1 http协议的无状态5.2 cookie的安全问题 6. http1.1长连接 前言 从本章开始我们要自顶向下的学习网络协议有了前面的基础我们再学习http协议就更容易理解了。本章的目标是学习http协议熟悉http的协议格式方法状态码等概念并且对http常见的报头进行学习。目标已经确定准备开讲啦… 【网络层状结构复习】 1. 认识URL 引入http协议 平时我们俗称的 网址 其实就是说的 URL。 URL是Uniform Resource Locator的缩写意为统一资源定位符 我们上一章节学习的 序列化与反序列化 所做的工作是在那一层呢—— 应用层 我们再来复盘一下之前的网络编程的过程 基本系统socket接口的使用指定协议编写业务 那么有没有已经非常成熟的场景自定义的协议这个协议写的不错然后成了应用层特定协议的标准被别人直接使用呢有的 比如说http、https、smpt、ftp、DNS… 在解析完协议之后需要被反序列化变成结构化数据。之后才形成完整的请求最后才能交给业务被计算。 使用确定协议的时候一般显示的时会缺省端口号 缺省的意思是在URL上或者分享的链接上不用带端口号。并不代表发送请求的时候是没有的它是有的而且是必须得有任何一个浏览器或者手机app收到链接点开的时候浏览器或者app必须自动添加上端口号只不过没有在URL中体现出来。 所以浏览器访问指定的URL的时候浏览器必须给我们自动添加port。 浏览器如何得知URL匹配的port是谁呢特定的众所周知服务端口号必须是确定的 例如httpserver-80、httpsServer-443、ssh-22。 服务和端口是必须绑定的用户自己写的网络服务bind端口的时候只能绑定1024之后的端口[1024 ~ n]。 域名和DNS 域名是指互联网上某个服务器的地址名称用于标识和定位一个互联网上的资源。域名通常由多个部分组成以点号.分隔例如baidu.com。域名系统 DNS 可以将域名转换为IP地址以便计算机能够访问该服务器上的资源。使用域名比直接使用IP地址更方便易记因此被广泛应用于互联网上的各种服务。 浏览器加一个服务DNS服务自动帮我们做的域名解析。域名必须被转化成为IP访问网络服务服务端必须具有port。网络通信的本质socket。(ip port) URL编码问题 urlencode和urldecode是用于对URL中的特殊字符进行编码和解码的函数。urlencode函数将URL中的特殊字符转换为%后面跟着两位十六进制数的形式。urldecode函数则进行相反的操作它将编码过的URL字符串解码回原始的字符串形式。 发起http请求的时候有些字段时需要编码的注意编码并不等于加密。一个%后面跟两个16进制数代表的就是一个字符汉字是三个字符代表一个汉字的所以两个汉字是6个百分号。 信息在本地编码之后交给服务器端服务器再对编码进行解码。所以就需要encode和decode。编码是浏览器做的而解码是服务端做的。 http是做什么的 http超文本传输协议为什么叫超文本的因为网页是文本的超在哪呢超在可以传图片视频音频。 查阅文档看音视频都是以网页的形式呈现的http获取网页资源的视频音频等也都是文件。 http是向特定的服务器申请特定的“资源的获取到本地进行展示或者某种使用的。如果我们客户端没有获取的时候资源在哪里呢 就在的网路服务器软件所在的服务器硬件计算机上。 服务器都是什么系统呢 Linux 这些资源都是文件都在Linux服务器上要打开资源文件、读取、发送会给客户端的前提 软件服务器必先找到这个文件 Linux要如何找到文件呢 通过路径 网络视角下Linux服务器上的所有的东西我们都称之为资源。无论是图片视频音频还是网页都叫做资源。http就是从本地向服务端获取资源的这就是http协议。 举个栗子 抓到了百度的网页这个网页就是通过百度对应的服务器通过一些客户端可以是浏览器或者是一些工具把它的网页拿下来了就是文件。 为什么URL可以定位唯一的资源 索要访问的某种资源一定是在全球特定的主机上的以特定的服务的方式在特定的路径下保存着的。因为ip地址定位到了全球当中唯一的主机端口号定位了主机上唯一的服务所以ip port定位了互联网中唯一的服务。路径一定是在该主机上的所以路径本身就具备唯一性。所以就能使用URL定位在全球当中的任意一个资源。 2. http协议格式 2.1 宏观格式 这么多行主体是很多http请求的报头属性请求报头的报头属性非常多所有的字段都是Key:空格value。 http是一个基于行的一个协议 报头最后一行是一个空行能够保证前面的内容不会是空行而且必须有字段。按照http协议在读取的时候可以按行去读直到读到空行就能证明将报头和请求行读完了。相当于用一个空行来作为一个分隔符让自己的报头能够全被解析出去。任何一个协议都要解决一个问题 将自己的有效载荷和自己的报头分离的问题。 任何协议的request or response都是报头 有效载荷。 http如何保证自己的报头和有效载荷被全部读取呢无论是请求还是响应 读取完整报头按行读取直到读取到空行 你又如何保证你能读取到完整的正文呢 报头能读取完毕请求或者响应属性中一定要包含正文的长度 当对http有了宏观结构上的认识之后也有一些不规范的写法http请求当中可能会少一些报头可能会没有正文但是都必须有请求行和空行。空行存在的最大意义就是将报头和有效载荷分离。 ip具有唯一性端口在该服务器上也具有唯一性那么路径就更具有唯一性了。诸多唯一性构建起来就构成了一个URL。 2.2 实验演示 有了之前的套接字编程经验我们直接写一个简易版的服务端TCP套接字 class ServerTcp { public:ServerTcp(uint16_t port, const std::string ip ): port_(port),ip_(ip),listenSock_(-1){quit_ false;}~ServerTcp(){if (listenSock_ 0)close(listenSock_);}public:void init(){// 1. 创建socketlistenSock_ socket(PF_INET, SOCK_STREAM, 0);if (listenSock_ 0){exit(1);}// 2. bind绑定// 2.1 填充服务器信息struct sockaddr_in local; // 用户栈memset(local, 0, sizeof local);local.sin_family PF_INET;local.sin_port htons(port_);ip_.empty() ? (local.sin_addr.s_addr INADDR_ANY) : (inet_aton(ip_.c_str(), local.sin_addr));// 2.2 本地socket信息写入sock_对应的内核区域if (bind(listenSock_, (const struct sockaddr *)local, sizeof local) 0){exit(2);}// 3. 监听socket为何要监听呢tcp是面向连接的if (listen(listenSock_, 5 /*后面再说*/) 0){exit(3);}// 运行别人来连接你了}void loop(){signal(SIGCHLD, SIG_IGN); // only Linuxwhile (!quit_){struct sockaddr_in peer;socklen_t len sizeof(peer);int serviceSock accept(listenSock_, (struct sockaddr *)peer, len);if (quit_)break;if (serviceSock 0){// 获取链接失败cerr accept error .... endl;continue;}// 多进程版本pid_t id fork();assert(id ! -1);if (id 0){close(listenSock_); // 建议if (fork() 0)exit(0);// 孙子进程handlerHttpRequest(serviceSock);exit(0); // 进入僵尸}close(serviceSock);wait(nullptr);}} private:// sockint listenSock_;// portuint16_t port_;// ipstd::string ip_;// 安全退出bool quit_; };不清楚的小伙伴看过来 TCP套接字复习。 我们用的是多进程版本的服务器。 提前搞一些宏标识 #define CRLF \r\n #define SPACE #define SPACE_LEN strlen(SPACE) #define HOME_PAGE index.html #define ROOT_PATH wwwroot服务端响应 void handlerHttpRequest(int sock) {char buffer[1024];ssize_t s read(sock, buffer, sizeof buffer);if (s 0)cout buffer;std::string path getPath(buffer);// path /a/b/index.html;// recource ./wwwroot; // 我们的web根目录// recource path; // 最终拼出来了-- ./wwwroot/a/b/index.html// 1. 文件在哪里 在请求的请求行中第二个字段就是你要访问的文件// 2. 如何读取std::string recource ROOT_PATH;recource path;cout [recoure]: recource std::endl;std::string html readFile(recource);std::size_t pos recource.rfind(.);std::string suffix recource.substr(pos);cout [suffix]: suffix endl;// 开始响应std::string response;// 两百这个状态码代表这次请求时OK的response HTTP/1.0 200 OK\r\n;if (suffix .jpg)response Content-Type: image/jpeg\r\n; // Content-type标定了正文的类型是什么elseresponse Content-Type: text/html\r\n;response (Content-Length: std::to_string(html.size()) \r\n);response \r\n; // 空行response html; // 正文send(sock, response.c_str(), response.size(), 0); }首先我们读取收到的序列化数据提取要获取的数据的路径根据路径在服务器上找对应的文件然后将文件提取出来。 随后开始响应填写响应报头根据文件的格式填好每个报头字段将提取到的文件拼接到最后然后发送给客户端。 Content-type标定了正文的类型是什么要根据不同的格式来填Content-type。 常用对照表 获取路径函数 std::string getPath(std::string http_request) {std::size_t pos http_request.find(CRLF);if (pos std::string::npos)return ;// 请求行std::string request_line http_request.substr(0, pos);// GET /a/b/c http/1.1std::size_t first request_line.find(SPACE);if (first std::string::npos)return ;std::size_t second request_line.rfind(SPACE);if (second std::string::npos)return ;std::string path request_line.substr(first SPACE_LEN, second - (first SPACE_LEN));if (path.size() 1 path[0] /)path HOME_PAGE;return path; }注意 在http请求中默认访问的文件路径是根目录也称为网站的根目录或文档根目录。但是这个根目录并不是服务器的根目录难不成将服务器所有内容返回给客户端吗不现实 读取文件函数 std::string readFile(const std::string recource) {std::ifstream in(recource, std::ifstream::binary);// 检测文件是否成功打开了if (!in.is_open())return 404;std::string content;std::string line;while (std::getline(in, line))content line;in.close();return content; }资源文件 !DOCTYPE html htmlheadmeta charsetutf-8title测试/title /headbodyh3hello my server!/h3p我终于测试完了我的代码/pform action/a/b/c.html methodpostUsername: input typetext nameuserbrPassword: input typepassword namepasswdbrinput typesubmit valueSubmit/form /body/html当然了我们也不懂前端随便写一点样例。 主函数 #include server.hppstatic void Usage(std::string proc) {std::cerr Usage:\n\t proc port std::endl;std::cerr example:\n\t proc 8080\n std::endl; }// ./ServerTcp local_port local_ip int main(int argc, char *argv[]) {if (argc ! 2){Usage(argv[0]);exit(0);}uint16_t port atoi(argv[1]);ServerTcp svr(port);svr.init();svr.loop();return 0; }用浏览器获取响应 用tenlnet获取响应 telnet是个命令可以远程的以协议的方式去登录某种服务 一般我们浏览器中请求的服务是一定有人曾经写过这样的服务部署在Linux上然后才可以请求。 3. http的方法 方法描述GET请求指定的资源。返回响应主体POST向指定资源提交数据进行处理请求。通常用于提交表单或上传文件PUT从客户端向服务器传送的数据取代指定的文档的内容DELETE请求服务器删除指定的资源HEAD获取对应的HTTP报头信息但不返回响应主体OPTIONS返回服务器支持的HTTP方法列表PATCH对资源进行部分修改 http的请求方法除了GET和POST还有其他方法但是用的特别少而且在大部分的服务器当中基本上很多的方法被注释掉了被禁掉了。 input标签会在网页当中给我们构建一个输入框。 URL可以在?后面带参数参数是KV的K对应的就是表单当中的nameV就是往表单当中输入的东西。 我们的网络行为无非有两种 我想把远端的资源拿到你的本地GET /index.html http/1.1。我们想把本地属性字段提交到远端GET or POST。 3.1 GET方法 在HTTP中GET会以明文方式将我们对应的参数信息拼接到URL中以这样的方式完成了提参的过程。 HTTP GET方法通常不包含请求正文。HTTP GET方法用于从服务器请求资源通常通过在URL中指定参数来传递请求参数而不是在请求正文中传递参数。GET方法将请求参数附加到URL的末尾形成查询字符串并将其发送到服务器。 3.2 POST方法 POST方法提交参数会将参数以明文的方式拼接到http的正文中来进行提交 POST方法请求正文一般携带的是http请求所带的参数。这个参数类似于C语言C的字符串。 在浏览器中提交表单的时候表单的内容以KV的方式拼接到正文了。 3.3 GET vs POST 小结 GET通过URL传参POST通过正文传参GET方法传参不私密POST方法因为通过正文传参所以相对比较私密一些GET通过URL传参POST通过正文传参所以一般一些比较大的内容都是通过POST方式传参的 http传输数据能有功能上的满足但是数据却在网络当中裸奔。所以这个数据无论如何都是不安全的。 如何选择 URL没有类型字段而是在请求和响应报文的头部中使用Content-Type字段来指定数据类型。所以就决定了正文部分可以传递更丰富的字段类型。URL要是传一些二进制内容而且量太大了挺不合适的。所以如果我们平时传一些文件对私密性有要求并且体积比较大的我们一般就用POST。 比如网页端上传一些简历上传一些视频或者是上传百度云盘的资料我们都用的是POST来传因为POST有详细的字段类型说明。 4. HTTP的报头和状态码 http常见的Header Header描述Content-Type数据类型指示服务器返回的正文部分的数据类型Content-Length有效载荷的长度Host客户端告知服务器所请求的资源在哪个主机的哪个端口User-Agent声明用户的操作系统和浏览器版本信息Referer当前页面是从哪个页面跳转过来的Location搭配3xx状态码使用告诉客户端接下来要去哪里访问Cookie在客户端存储少量信息通常用于实现会话功能 Linux网页的跳转本质是Linux目录的跳转referer代表上一个目录是什么。 http这样的协议几乎是基于纯文本的而且可展性还非常强如果未来http想要新功能新属性直接在请求和响应报头里添加KV字符串行就可以。 状态码 状态码范围类别描述1XX信息性状态码服务器已接受请求需要客户端继续操作2XX成功状态码请求已成功处理3XX重定向状态码需要完成进一步的操作以完成请求4XX客户端错误状态码请求包含语法错误或无法完成请求5XX服务器错误状态码服务器在处理请求时发生内部错误或超时等 目前被主流浏览器所接受的重定向是301和302。 301和302通常是做什么的呢 301永久重定向302 临时重定向 临时重定向 假设要访问某个网站但是这个网站局部性的有内容要升级并不想让用户访问这个服务。当有用户来访问时我们就将其重定向到备份的服务当中当内容升级完了再将临时重定向去掉。客户端再来访问时就可以访问到了。 永久重定向 老网站的用户数量非常的多但是想要用户去访问新的网站。所以将新网站推出让别人能够访问其次老网站不关。将所有的服务全部下线并且只提供一个功能在用户请求它时重定向就可以了。 重定向代码 void handlerHttpRequest(int sock) {char buffer[1024];ssize_t s read(sock, buffer, sizeof buffer);if (s 0)cout buffer;std::string response HTTP/1.1 302 Temporarily Moved\r\n;// std::string response HTTP/1.1 301 Permanently Moved\r\n;// Location后面填的一定是个网址response Location: https://www.qq.com/\r\n; response \r\n;send(sock, response.c_str(), response.size(), 0); }在响应时状态码填的是301或者302代表的意思是重定向给客户端响应还会给一个新的网址。 因为我们是服务端将从客户端收到的报文打印出来所以当客户端请求时会将请求报文打印出来然后再将带有location的报文发给客户端。 但是我们是打印不出来带有location字段的报文的因为客户端重定向到了别的服务器了。 浏览器演示图 telnet演示图 通过Telnet可以获取远端服务器的响应。当你使用Telnet连接到远程服务器后你可以输入命令并发送给服务器然后等待服务器的响应。服务器会返回相应的结果包括命令执行的输出、状态信息等。 小结 永久和临时的区别它俩的应用场景是不一样的对客户端的影响也是不一样的。也有其他的重定向例如307因为其他重定向对应的浏览器的支持并不好不一定被所有的浏览器所接受。但是301和302是被所有浏览器接受的。 5. http的cookie 5.1 http协议的无状态 http协议特点之一无状态 是什么意思呢 —— 用户的各种资源请求行为http本身并不做任何记录 HTTP的无状态(Stateless)指的是 每个HTTP请求都是独立的服务器不会保存与之前请求相关的任何信息。每个请求都包含足够的信息以便服务器能够理解和处理该请求而无需依赖于之前的请求。 但是用户需要会话保持! HTTP的Cookie也称为HTTP Cookie、Web Cookie或浏览器Cookie 是一种用于网站与浏览器之间进行状态管理的技术。它通过在用户浏览器中存储少量数据并在以后的请求中发送给同一网站实现对用户状态的追踪和识别。 当用户第一次访问一个网站时网站服务器可以通过HTTP响应报头中的Set-Cookie字段将一个Cookie发送给用户。浏览器会将这个Cookie存储起来并在用户以后对同一网站发送请求时通过HTTP请求头中的Cookie字段将这个Cookie发送回服务器。 编写响应报文 获取服务器的响应 第二次以后的请求会携带一个字段叫做cookie就代表我们曾经写的内容 当写入一个cookie之后在进行后续的访问时浏览器请求都会帮我们携带曾经写入到浏览器对应的cookie信息。cookie文件内容所以后端认证时就不需要再输入用户名和密码了就可以始终以登录状态来进行访问。通过使用Cookie服务端可以保持跟踪客户端的会话信息、用户认证状态等。同时客户端也可以根据需要修改和删除Cookie值。 cookie就是浏览器帮我们维护的一个文件 浏览器维护的文件存在磁盘或者内存级。只要不关闭这个浏览器cookie文件依旧在但是如果把浏览器结束掉那么cookie文件就没了。不同的浏览器和不同的设备如电脑、手机等可能具有不同的Cookie策略和存储方式。 在浏览器中查看Cookie 5.2 cookie的安全问题 当第一次客户端请求服务端的时候将用户账号和密码发给服务端服务端完成匹配之后将携带用户账号和密码的Cookie文件返回给客户端但是这是极其不安全的 一旦有中间人在服务端返回给客户端的时候将返回内容截取那么用户的账号和密码就会泄露。 现在主流的是cookie session 服务端在收到客户端请求时在内部验证信息一旦验证通过不再给客户端返回携带用户账号和密码的Cookie文件而是在服务端本地形成一个session文件 用户的临时私密信息保存在自动形成的session文件中。 session_id是具有唯一性的是一个用于标识和跟踪用户会话状态的唯一标识符。 用户的所有信息此时就不在客户端cookie维护了而是在服务端将用户所有私有信息维护起来。实际上用户的个人信息通常存储在服务器端的一个数据结构如内存、数据库中。 服务器会根据Session ID来查找相应的会话数据从而获取用户的个人信息。 session里包含了文件的私密信息包括了这个用户是谁浏览痕迹是什么最近一次访问时间是什么时候session有没有过期等等。只要拿着session_id找到session文件就证明用户处于登录状态然后服务器就允许该用户去访问指定资源。 依旧存在安全问题 从此往后客户再去访问时都会携带自己的session_id从而来保持这个客户处于在线状态。但是还是没有彻底解决相应问题这样只解决了私密信息不会泄露了。因为用户名和密码在服务端黑客只能拿到session_id对于用户来讲账号至少是安全的。 6. http1.1长连接 用户所看到的完整的网页内容背后可能是无数次http清求http底层主流采用的就是tcp协议 长连接Connection: keep-alive 一次http请求获取一张给用户呈现的完整网页时http建立一 个连接。此时服务端和客户端双方都要进行http版本协商所以这二者都要携带上自己http协议的版本。请求时是http1.1响应时也是http1.1同时还携带了一个Connection字段叫做keep-alive。双方如果都是http1.1并且字段都携带keep-alive意味着我们在进行底层连接协商的时候双方都同意采用长连接方案。 http1.0当中是基于短连接的短连接一次只处理一个http请求Connection: closed 对于长连接的理解 一张网页有若干个元素构成我们在底层发起请求这个连接暂时不断开发起若干次http请求同时把若干次http请求全部都发送到服务器服务器从一个连接里读到的不仅仅是一个请求它可以读到很多请求然后按照顺序再把若干个响应全部都返回给客户端当客户端拿到了完整的网页时这个连接才断开。 也就是说一次获取若干个元素时这些若干个元素用一条连接全部请求和响应不用重复的建立TCP底层的三次握手四次挥手。这样就能大大的提高效率。 其中双方支持长连接协商的时候Connection如果是keep-alive客户端发的请求里带了服务端的响应里带了就说明双发协商成功我们双方都认可采用keep-alive也叫做连接保活的策略。 因为http1.1有了keep-alive为了区分http1.0所以原来的Connection如果是close就叫做只支持短连接。 如果http请求每次都采用短连接的话 最大的成本就是在底层要不断地进行三次握手和四次挥手。这就大大降低了获取的速度所以短连接就不再符合时宜。 怎么请求的就怎么晌应按照顺序响应pipeline技术。 一个连接有多个请求了如何保证服务端读取请求时都是一个完整的请求呢 根据报文中的Content-length来读取。能保证读到的是一个完整的请求也能保证不会读到别的请求。经过报头和有效载荷合理分离就能做到将报文和报文之间做到完整分离。那么多个http请求能够向服务端同时发起多个请求。 http是基于tcp的tcp协议是面向连接的但是http是无连接的怎么解释重点 http协议和tcp协议是两层协议是毫无相关的tcp的面向连接和http无关。http是无连接的只是用了一下tcp的能力把信道建立好用tcp来完成http的工作比如说发起http请求。但是http在通信时并不会建立连接。 所以http最核心的特点是超文本传输协议是一个无连接无状态的一个应用层协议这就是http的定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商外贸网站建设新网域名自助管理平台

ANSYS Fluent和COMSOL Multiphysics以及OpenFOAM这3款CFD软件哪个好?cfd软件中哪款最实用?cfd软件有哪些?今天就给大家带来这几款CFD软件对比分析,一起来看看吧。 ANSYS Fluent ANSYS Fluent 是一种流行的计算流体动力学 (CFD) …

【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践

【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

第13章 day14-15 Webpack逆向

Webpack逆向 Webpack是一个现代的静态模块打包工具,它主要用于前端开发中的模块化打包和构建。通过Webpack,开发者可以将多个模块(包括JavaScript、CSS、图片等)进行打包,生成优化后的静态资源文件,以供在浏览器…

Viper远程配置踩坑记录

尝试etcd做配置中心,就用了Viper。没想到踩了一堆坑,记录一下。 一开始的代码是这么写的,想着先监听再读取: func initViperRemote() {err := viper.AddRemoteProvider("etcd3","http://127.0.0.1:…

深入解析:JVM(六)-- StringTable

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

开发一个彩票网站多少钱济南医院网站建设服务公司

来源:AI科技评论作者:陈彩娴、Mr Bear编辑:青暮近日,图灵奖得主、“贝叶斯网络之父”Judea Pearl在Twitter上分享了一篇新论文“What are the most important statistical ideas of the past 50 years?”(过去50年中最…

医院网站系统源码怎么推广引流

Linux平台 一、从yum源脚本安装部署Zabbix-Agent,添加Linux Servers/PC 概述 Zabbix 主要有以下几个组件组成: Zabbix Server:Zabbix 服务端,Zabbix的核心组件,它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中。 Zabbix Agent:Zabbix客户端,部署在被监…

国产智能体脂秤PCBA方案设计

一、产品介绍:智能体脂秤是一款高精度、多功能的健康管理工具,通过测量身体脂肪百分比、肌肉质量、骨骼密度等参数,帮助用户了解自身身体健康状况,并提供个性化的健康建议。其结构设计紧凑,外观简约时尚,适用于家…

完整教程:JRE、JDK、JVM 及 JIT 之间有什么不同?

完整教程:JRE、JDK、JVM 及 JIT 之间有什么不同?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

第15章 day18 Ast系列篇

Ast系列篇 何为混淆? 混淆可以理解为是一种对js代码加密技术,主要用于隐藏代码的真实功能,以防止js代码被逆向工程师分析和修改。通过混淆,让代码变得复杂和难以理解,使得逆向工程师在调试工程中消耗大量的时间或…

微波雷达模块在智能家居中的具体应用案例有哪些?

​微波雷达模块在智能家居中的具体应用案例有哪些?首先我们要明确什么是微波雷达? 微波是指频率在300MHz至300GHz之间的电磁波,其波长范围从1米到1毫米不等。微波具有穿透性、反射性和热效应等特点,因此在通信、加…

Ubuntu 桌面快捷方式创建增加记录

使用图形界面创建桌面快捷方式打开终端进入 GoLand 的 bin 目录:cd ~/Apps/GoLand-2024.1/bin创建桌面快捷方式文件:sudo nano /usr/share/applications/goland.desktop编写内容到文件中:[Desktop Entry] Version=1…

网站 wap 插件长春火车站是哪个站

1、 Lua:元表是什么,怎么实现对象继承 2、OPP是什么 3、mvc结构 4、C#: list和array区别和使用场景 5、项目: (1)ui框架类设计,ui层级管理怎么做,对象初始化内存占用这样做高,资源是…

arm64中的内存屏障指令

asm volatile("dmb osh" : : : "memory")是什么? arm架构有三种内存屏障,分别是: Data Memory Barrier, Data Synchronization Barrier, and Instruction Synchronization Barrier. OSH表示DMB…

三分

篇首语啊~~三分~你比二分多一分~——A86562U正文 顾名思义,三分会比二分多一个分区,但它是用来做什么的呢?先来偷一道拿一道例题来举例 P3382 三分 - 洛谷 我们把二分的模板偷一份拿一份过来#include<bits/stdc+…

完整教程:微服务基础2-网关路由

完整教程:微服务基础2-网关路由pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

第21章 Day25 抖音最新ab

import requests import execjs import urllib.parsecookies = {enter_pc_once: 1,UIFID_TEMP: 163eead721bc91ca6f3a3cb4766a73c0638fabced1012e02c28bcbf3169aca5c44c51fa6beff8f1f2615be624638d06da543fe1615ff22d8…

东莞seo网站优化运营携程网站建设的意义

目录 前言1. 原理分析2. 解决方法3. 彩蛋前言 一时用不了软件,安装修复的时候也出现问题 DISM一直卡在63.2%,等了好久时间,直接强制退出寻找最终的解决方案 1. 原理分析 基本的原理查看:清理 WinSxS 文件夹 官网 主要有如下原因: 系统更新服务导致问题的存在系统文件…

wordpress模板获取数据库桂林网站seo

本文来源公众号“萝卜大杂烩”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Polars (最强Pandas平替) 本文章转自&#xff1a;数据studio 1 介绍 Polars是一个用于操作结构化数据的高性能DataFrame库&#xff0c;可以说是平替…

nginx ipv6 proxy配置

方式一:采用upstream方式upstream npmgmt.net.cmft {server 10.126.11.4:7070 weight=1 fail_timeout=10s max_fails=1 ;server [2409:8095:8110:1006::a7f:b60a];} server { server_name npmgmt.net.cmft; …