完整http服务器

目录

  1. 背景
  2. 目标
  3. 描述
  4. 技术特点
  5. 开发环境
  6. WWW
  7. 客户端浏览发展史
  8. 服务端http发展史
  9. http分层概览

背景

http协议被广泛使用,从移动端,pc浏览器,http无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可撼动,是能准确区分前后的重要协议、

目标

对http协议的理论学习,从零开始完成web服务器开发,作用下三层协议,从技术到应用,让网络难点无处遁形

描述

采用C/S模型,编写支持中小型应用的http,并结合mysql,理解常见互联网应用行为,完全理解从上网开始,到关闭浏览器的所有操作中的技术细节

技术特点

网络编程(TCP/IP协议,socket流式套接字,http协议)
多线程技术
cgi技术
线程池

开发环境

cents 7/ubuntu 20.04 + vim/gcc/gdb+c/c++

WWW

www是环球信息网的缩写,(亦作“Web”、“WWW”、“W3”,英文全称为“World Wide Web”),中文名字‘万维网,“环球网”’等,常简称为Web

分为Web客户端和Web服务器程序。www可以让Web客户端(常用浏览器)访问浏览Web的页面。是一个由许多互相连接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全局“统一资源标识符”(URI)标识;这些资源通过超文本传输协议(Hypertext Transfer protocol)传送给用户,而后者通过点击链接来获得资源

万维网联盟(World Wide Web Consortium,简称W3C),又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。万维网联盟的创始人是万维网的发明者蒂姆·博纳斯-李。–摘自这里

客户端浏览发展史

1990年11月,世界上第一台Web服务器和Web浏览器诞生
1993年1月,NCSA(美国国家超级计算机应⽤中心NationalCenterfor SupercomputerApplications,简称NCSA)研发html内联显⽰图⽚的浏览器Mosaic,不久windows和苹果mac版的Mosaic相继出

NASAhttpd1.0也差不多这个时期出现
1994年12⽉网景公司NetscapeNavigator1.0(网景领航员)浏览器出现
1995年微软发布IE1.0和2.0
紧随其后,web服务器标准Apache0.2诞⽣
1995年左右,微软和⽹景针对html标准开始打仗
2000年,⽹景衰落
2004年,Mozilla(缩写MF或MoFo,全称Mozilla基⾦会,是为⽀持和领导开源的Mozilla项⽬⽽设⽴的⼀个⾮营利组织)基⾦发布firefox,第⼆次浏览器⼤战⼜开始了
随后,IE发布6,7,8,9,10版本,同步Chrome,Opera,Safari浏览器也开始抢占市场
今天的浏览器格局形成

服务端http发展史

1990年,HTTP/0.9诞⽣
1996年5⽉,HTTP/1.0标准诞⽣,记载于RFC1945,该标准⾄今仍然被使⽤
1997年1⽉,HTTP/1.1问世,是⽬前使⽤的主流http版本
HTTP/2.0正在定制,但要被⼴泛使⽤,仍旧需要较多时间

http分层概览

整体来看

在这里插入图片描述

细节

在这里插入图片描述

http相关协议

TCP
IP
DNS

DNS

在这里插入图片描述

http背景补充

目前主流使用http1.1,按照1.0来实现
http是无状态的,不会保留之前的请求和响应,为了保持状态,引入了cookie

URI、URL、URN

URI,是uniform resource identifier,统⼀资源标识符,⽤来唯⼀的标识⼀个资源
URL,是uniform resource locator,统⼀资源定位符,它是⼀种具体的URI,即URL可以⽤来标识⼀个资源,⽽且还指明了如何locate这个资源。
URN,uniform resource name,统⼀资源命名,是通过名字来标识资源,⽐如mailto:javanet@java.sun.com。

URI是一种抽象的,高层次概括定义统一资源表示,URL和URN是具体的资源表示方式,都是一种URI
URL是URI的子集,任何东西,只要能唯一标识出来,都可以说是URI。如果这个标识可以获取到上述对象的路径,同时也它可以是一个URL,但如果这个标识不提供获取对象的路径,,必然不是URL
URI: /home/index.html
URL: www.xxx.com:/home/index.html

浏览器URL格式

http是基于tcp的连接方式进行网络连接,1.1版本可以持续的长连接机制,绝大多数的web开发,都是构建在http协议上的应用
http url的格式如下:
http表⽰要通过HTTP协议来定位⽹络资源
host表⽰合法的Internet主机域名或者IP地址,本主机IP:127.0.0.1
port指定⼀个端⼝号,为空则使⽤缺省端⼝80
abs_path指定请求资源的URI
如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个⼯作浏览器⾃动帮我们完成。默认访问首页

一个较完整的http请求:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1

请求与响应

示意图
在这里插入图片描述

细节

请求格式
在这里插入图片描述
响应格式
在这里插入图片描述

请求的方法

GET:获取资源,获取被URI标识的资源,重点
POST:传输实体主体,重点
PUT:传输文件,指定文件放的uri所标识的路径,类似ftp,有安全问题,大部分web不用
HEAD:获取报文首部,和GET类似,但是不返回报文主体部分。用于确认uri的有效性以及资源的日期等
DELETE:与put相反,删除uri指定的资源,不安全,一般也不使用
OPTIONS:询问支持方法
TRACE:追踪路径
CONNECT:使用隧道协议连接代理

总结方法:
在这里插入图片描述

响应,状态码及描述

状态码用表示服务器http响应状态的3位数字代码、通过状态码,就可以知道服务端是否正确的处理请求,如果不正确,是什么原因导致的(404)

是http返回给浏览器的状态码

在这里插入图片描述

状态码分类

在这里插入图片描述

常见状态码

2XX 成功:结果正确处理
200 OK:客户端的请求,被正确处理了
204:请求结果正确处理,但响应信息没有正文
206 Partial Content:表示客户端队服务器进行了范围请求,而且服务器成功执行了这部分GET请求,响应报文中由Content-Range指定的实体内容范围

3XX 成功:浏览器需要执行某些特殊的处理以正确处理请求
301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的uri,以后用新的uri,如果之前将老的uri保存为书签了,后面应该按照响应的location首部字段重新保存书签
302 Found:临时重定向,目标资源分配了新的uri,希望用户本次用新的uri访问
在这里插入图片描述
307 Temporary Redirect:临时重定向,该状态码与302有相同含义,307会遵守标准,不会从post变get,每种浏览器可能有不同的情况

4XX 客户端错误:客户端发生错误的原因
400 Bad Request:表明请求报文中存在语法错误,需修改请求内容重新发送,另外,浏览器会像200 OK一样对待该状态码
403 Forbidden:表明浏览器请求的资源被服务器拒绝了,服务器没有必要给出详细理由,如果要说明,可以在响应实体内部说明
404 Not Found:没有请求的资源

5XX 服务器错误:服务器本身发生错误
500 Internal Server Error:服务端执行发生错误,可能是web本身的bug或临时故障
503 Server Unavailable:服务器处于超负荷或正在停机维护,目前无法处理请求,最好写入Retry-After首部字段返回客户端

在这里插入图片描述

CGI机制

CGI(CommonGatewayInterface)是WWW技术中最重要的技术之⼀,有着不可替代的重要地位。CGI是外部应⽤程序(CGI程序)与WEB服务器之间的接⼝标准,是在CGI程序和Web服务器之间传递信息的过程
浏览器除了从服务器下获得资源(⽹⻚,图⽚,⽂字等),有时候还有能上传⼀些东西(提交表单,注册⽤⼾之类的),看看我们⽬前的http只能进⾏获得资源,并不能够进⾏上传资源,所以⽬前http并不具有交互式。为了让我们的⽹站能够实现交互式,我们需要使⽤CGI完成,时刻记着,我们⽬前是要写⼀个http,所以,CGI的所有交互细节,都需要我们来完成。包括http提供的CGI机制和自己实现CGI程序

首先区分get和post的区别
GET⽅法从浏览器传参数给http服务器时,是需要将参数跟到URI后⾯的
POST⽅法从浏览器传参数给http服务器时,是需要将参数放的请求正⽂的

GET⽅法,如果没有传参,http按照⼀般的⽅式进⾏,返回资源即可
GET⽅法,如果有参数传⼊,http就需要按照CGI⽅式处理参数,并将执⾏结果(期望资源)返回给浏览器
POST⽅法,⼀般都需要使⽤CGI⽅式来进⾏处理
在这里插入图片描述

线程池介入

大量链接会导致内部进程线程暴增,让服务器效率恒定

完整代码

服务器部分

TcpServer.hpp

#pragma once
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include "Log.hpp"#define BACKLOG 5class TcpServer
{
public:TcpServer(int port):_port(port),_listen_sock(-1){}void InitServer(){Socket();Bind();Listen();LOG(INFO, "tcpserver init success...");}void Socket(){_listen_sock = socket(AF_INET, SOCK_STREAM, 0);if (_listen_sock < 0){LOG(FATAL, "socket error!");exit(1);}int opt = 1;setsockopt(_listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));}void Bind(){struct sockaddr_in local;memset(&local, 0, sizeof(local));local.sin_addr.s_addr = INADDR_ANY;local.sin_family = AF_INET;local.sin_port = htons(_port);if (bind(_listen_sock, (const sockaddr*)&local, sizeof(local)) < 0){LOG(FATAL, "bind error!");exit(2);}}void Listen(){if (listen(_listen_sock, BACKLOG) < 0){LOG(FATAL, "listen error!");exit(3);}}static TcpServer* GetInstance(int port){static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;if (_svr == nullptr){pthread_mutex_lock(&mutex);if (_svr == nullptr){_svr = new TcpServer(port);_svr->InitServer();}pthread_mutex_unlock(&mutex);}return _svr;}        inline int Sock(){return _listen_sock;}~TcpServer(){if(_listen_sock >= 0){close(_listen_sock);}}private:int _port;int _listen_sock;static TcpServer* _svr;TcpServer(const TcpServer& x){}
};TcpServer* TcpServer::_svr = nullptr;

HttpServer.hpp

#pragma once
#include <signal.h>
#include "TcpServer.hpp"
#include "Task.hpp"
#include "ThreadPool.hpp"#define PORT 8000class HttpServer
{
public:HttpServer(int port = PORT):_port(port),//_tpc_server(nullptr),_stop(false){}void InitServer(){// 信号忽略,不然写入时可能直接崩溃signal(SIGPIPE, SIG_IGN);//_tpc_server = TcpServer::GetInstance(_port);}void Loop(){//int listen_sock = _tpc_server->Sock();TcpServer *tsvr = TcpServer::GetInstance(_port);while (!_stop){struct sockaddr_in peer;memset(&peer, 0, sizeof(peer));socklen_t len = sizeof(peer);int sock = accept(tsvr->Sock(), (sockaddr *)&peer, &len);if (sock < 0){continue;}LOG(INFO, "get a new link...");// int* tmp_sock = new int(sock);// pthread_t tid;// pthread_create(&tid, nullptr, Entrance::HandlerRequest, tmp_sock);// 引入线程池Task task(sock);ThreadPool::GetInstance()->PushTask(task);//_pool.push_back(task);}}~HttpServer(){}private:int _port;//TcpServer* _tpc_server;bool _stop;
};

服务器辅助分

Util.hpp

#pragma once
#include <string>
#include <sys/types.h>
#include <sys/socket.h>class Util
{
public:static int ReadLine(int sock, std::string& out){char ch;while (ch != '\n'){ssize_t s = recv(sock, &ch, sizeof(ch), 0);if (s > 0){if (ch == '\r'){// 看看后面是不是\n  \r或\r\n->\nrecv(sock, &ch, sizeof(ch), MSG_PEEK);if (ch == '\n'){// \r\n只读\n// 窥探到就一定存在recv(sock, &ch, sizeof(ch), 0);}else{ch = '\n';}}// 普通字符// \nout.push_back(ch);}else if (s == 0){return 0;}else{return -1;}}return out.size();}static bool CutString(const std::string& target, std::string& sub_out1, std::string& sub_out2, std::string sep){ssize_t pos = target.find(sep);if (pos != std::string::npos){sub_out1 = target.substr(0, pos);sub_out2 = target.substr(pos + sep.size());return true;}return false;}private:
};

线程池部分

#pragma once
#include <queue>
#include <thread>
#include "Task.hpp"#define NUM 6class ThreadPool
{
private:ThreadPool(int num = NUM): _num(num),_stop(false){pthread_mutex_init(&_mutex, nullptr);pthread_cond_init(&_cond, nullptr);}ThreadPool(const ThreadPool&){}public:bool InitThreadPool(){for (int i = 0; i < _num; i++){pthread_t tid;if (pthread_create(&tid, nullptr, ThreadRoutinue, this) != 0){LOG(FATAL, "create thread pool error");return false;}}LOG(FATAL, "create thread pool success");return true;}bool IsStop(){return _stop;}static void* ThreadRoutinue(void* args){ThreadPool *tp = (ThreadPool *)(args);while (true){Task task;tp->Lock();// while 防止误唤醒while (tp->TaskQueueIsEmpty()){tp->ThreadWait(); // 醒来时,一定占有锁}tp->UnLock();tp->PopTask(task);task.ProcessOn();}}void ThreadWait(){pthread_cond_wait(&_cond, &_mutex);}void ThreadWakeUp(){pthread_cond_signal(&_cond);}void Lock(){pthread_mutex_lock(&_mutex);}void UnLock(){pthread_mutex_unlock(&_mutex);}void PushTask(const Task& task){Lock();_task_queue.push(task);UnLock();ThreadWakeUp();}bool TaskQueueIsEmpty(){return _task_queue.size() == 0 ? true : false;}void PopTask(Task& task){task = _task_queue.front();_task_queue.pop();}static ThreadPool* GetInstance(){static pthread_mutex_t _lock = PTHREAD_MUTEX_INITIALIZER;if (_instance == nullptr){pthread_mutex_lock(&_lock);if (_instance == nullptr){_instance = new ThreadPool();_instance->InitThreadPool();}pthread_mutex_unlock(&_lock);}return _instance;}~ThreadPool(){pthread_mutex_destroy(&_mutex);pthread_cond_destroy(&_cond);}private:int _num;bool _stop;std::queue<Task> _task_queue;pthread_mutex_t _mutex;pthread_cond_t _cond;static ThreadPool* _instance;
};ThreadPool* ThreadPool::_instance = nullptr;

Task.hpp

#pragma once
#include "Protocol.hpp"class Task
{
public:Task(){}Task(int sock): _sock(sock){}// 处理任务void ProcessOn(){_handler(_sock);}private:int _sock;CallBack _handler;  // 设置回调
};

协议部分

Protocol.hpp

#pragma once
#include <iostream>
#include <unistd.h>
#include <vector>
#include <sstream>
#include <unordered_map>
#include <sys/stat.h>
#include <sys/sendfile.h>
#include <fcntl.h>
#include <algorithm>
#include <sys/wait.h>
#include "Util.hpp"#define SEP ": "
#define OK 200
#define NOT_FOUND 404
#define BAD_REQUEST 400
#define SERVER_ERROR 500#define WROOT "wwwroot"
#define HOME_PAGE "index.html"
#define PAGE_404 "404.html"
#define HTTP_VERSION "HTTP/1.0"
#define LINE_END "\r\n"//#define DEBUGstatic std::string CodeDesc(int code)
{std::string desc;switch (code){case 200:desc = "OK";break;case 404:desc = "Not Found";break;default: break;}return desc;
}static std::string SuffixDesc(const std::string suffix)
{static std::unordered_map<std::string, std::string> suffixdesc ={{".html", "text/html"},{".css", "text/css"},{".js", "application/json"},{".xml", "application/xml"},{".jpg", "image/jpeg"}};auto it = suffixdesc.find(suffix);if (it != suffixdesc.end()){return it->second;}return "text/html";
}class HttpRequest
{
public:HttpRequest():_content_length(0),_cgi(false){}~HttpRequest(){}public:std::string _request_line;std::vector<std::string> _request_header;std::string _blank;std::string _request_body;// 解析完毕的结果std::string _method;std::string _url;std::string _path;          // 请求目录和参数std::string _query_string;std::string _version;std::unordered_map<std::string, std::string> _header_kv;int _content_length;std::string _suffix;int _size;// CGI机制bool _cgi;
};class HttpResponse
{
public:HttpResponse():_blank(LINE_END),_status_code(OK),_fd(-1){}~HttpResponse(){}public:std::string _status_line;std::vector<std::string> _response_header;std::string _blank;std::string __response_body;int _fd;int _status_code;
};class EndPoint
{
public:bool RecvHttpRequestLine(){auto &line = _http_request._request_line;if (Util::ReadLine(_sock, line) > 0){line.resize(line.size() - 1);LOG(INFO, _http_request._request_line);}else{_stop = true;}return _stop;}bool RecvHttpRequestHeader(){std::string line;while (true){line.clear();if (Util::ReadLine(_sock, line) <= 0){_stop = true;break;}if (line == "\n"){_http_request._blank = line;break;}line.resize(line.size() - 1);_http_request._request_header.push_back(line);}return _stop;}void ParseHttpRequestLine(){auto& line = _http_request._request_line;std::stringstream s(line);s >> _http_request._method >> _http_request._url >> _http_request._version;auto &method = _http_request._method;std::transform(method.begin(), method.end(), method.begin(), ::toupper);}void ParseHttpRequestHander(){for (auto& line: _http_request._request_header){std::string key;std::string value;if (Util::CutString(line, key, value, SEP)){std::cout << key << ":" << value << std::endl;_http_request._header_kv.insert({key, value});}}}bool IsNeedRecvHttpRequestBody(){if (_http_request._method == "POST"){   auto it = _http_request._header_kv.find("Content-Length");if (it != _http_request._header_kv.end()){_http_request._content_length = atoi(it->second.c_str());return true;}}return false;}bool RecvHttpRequestBody(){if (IsNeedRecvHttpRequestBody()){int len = _http_request._content_length;auto &body = _http_request._request_body;char ch = 0;while (len){ssize_t s = recv(_sock, &ch, 1, 0);if (s > 0){body.push_back(ch);len--;}else{_stop = true;break;}}}return _stop;}public:EndPoint(int sock):_sock(sock),_stop(false){}void RecvHttpRequest(){if (!RecvHttpRequestLine() && !RecvHttpRequestHeader()){ParseHttpRequestLine();ParseHttpRequestHander();RecvHttpRequestBody();}}// cgi处理int ProcessCgi(){int code = OK;auto &bin = _http_request._path;auto &method = _http_request._method;auto &query_string = _http_request._query_string; // GETauto &body_text = _http_request._request_body; // POSTauto &response_body = _http_response.__response_body;int content_length = _http_request._content_length;// 环境变量,用来GET传std::string query_string_env;std::string method_env;std::string content_length_env;// 管道通信int input[2];int output[2];if (pipe(input) < 0){LOG(ERROR, "pipe input error");code = SERVER_ERROR;return code;}if (pipe(output) < 0){LOG(ERROR, "pipe input error");code = SERVER_ERROR;return code;}// 父进程关闭input写端,只读。关output读端,只写// 新线程,从头到尾只有一个进程,不能本进程替换, 创建新进程pid_t pid = fork();if (pid == 0){// execclose(input[0]);close(output[1]);// 通过方法判断从哪取参数method_env = "METHOD=";method_env += method;putenv(((char*)method_env.c_str()));if (method == "GET"){ query_string_env += "QUERY_STRING=";query_string_env += query_string;// 注册环境变量putenv(((char*)query_string_env.c_str()));}else if (method == "POST"){content_length_env = "CONTENT_LENGTH=";content_length_env += std::to_string(content_length);putenv((char*)(content_length_env.c_str()));}else{// do nothing}std::cout << "替换的程序为:" << bin << std::endl;dup2(input[1], 1);dup2(output[0], 0);execl(bin.c_str(), bin.c_str(), nullptr);exit(1);}else if (pid > 0){// parentclose(input[1]);close(output[0]);if (method == "POST"){const char *start = body_text.c_str();int total = 0;int size = 0;// 防止一次没写完while ((total < content_length) && (size = write(output[1], start + total, body_text.size() - total)) > 0){total += size;}}// 读取cgi返回的数据char ch = 0;while (read(input[0], &ch, 1) > 0){response_body.push_back(ch);}// 判断子进程退出状态int status = 0;pid_t ret = waitpid(pid, &status, 0);if (ret == pid){if (WIFEXITED(status)){if (WEXITSTATUS(status) == 0){code = OK;}else{code = BAD_REQUEST;}}else{code = SERVER_ERROR;}}// 使用完后关闭描述符close(input[0]);close(output[1]);           }else{LOG(ERROR, "fork error");return 404;}return code;}int ProcessNoCgi(){_http_response._fd = open(_http_request._path.c_str(), O_RDONLY);if (_http_response._fd >= 0){return OK;}return NOT_FOUND;}void BuildOkResponse(){std::string line = "Content-Type: ";line += SuffixDesc(_http_request._suffix);line += LINE_END;_http_response._response_header.push_back(line);line += "Content-Length: ";if (_http_request._cgi){line += std::to_string(_http_response.__response_body.size());}else{// getline += std::to_string(_http_request._size);}line += LINE_END;_http_response._response_header.push_back(line);}void HandlerError(std::string page){_http_request._cgi = false;// 给用户返回对应错误页面_http_response._fd = open(page.c_str(), O_RDONLY);if (_http_response._fd > 0){struct stat st;stat(page.c_str(), &st);_http_request._size = st.st_size;std::string line = "Content-Type: text/html";  // 这里明确了是返回网页line += LINE_END;_http_response._response_header.push_back(line);line = "Content-Length: ";line += std::to_string(st.st_size);line += LINE_END;_http_response._response_header.push_back(line);}}void BuildHttpResponseHelper(){auto &code = _http_response._status_code;auto &status_line = _http_response._status_line;// 构建状态行status_line = HTTP_VERSION;status_line += " ";status_line += std::to_string(code);status_line += " ";status_line += CodeDesc(code);status_line += LINE_END;// 构建响应正文,可能包含报头std::string path = WROOT;path += "/";switch (code){case OK:BuildOkResponse();break;case NOT_FOUND:path += PAGE_404;HandlerError(path);break;// case 500://     HandlerError(PAGE_500);//     break;default:path += PAGE_404;HandlerError(path);break;}}void BuildHttpResponse(){struct stat st;int found = 0;std::string path;auto &code = _http_response._status_code;std::cout << "方法是: " << _http_request._method << std::endl;if (_http_request._method != "GET" && _http_request._method != "POST"){// 非法请求LOG(WARNING, "method not is right");code = BAD_REQUEST;goto END;}if (_http_request._method == "GET"){ssize_t pos = _http_request._url.find("?");if (pos != std::string::npos){Util::CutString(_http_request._url, _http_request._path, _http_request._query_string, "?");_http_request._cgi = true;}else{_http_request._path = _http_request._url;}} else if (_http_request._method == "POST"){_http_request._cgi = true;_http_request._path = _http_request._url;}else{// do nothing}// std::cout << _http_request._path << " " << _http_request._query_string << std::endl;path = _http_request._path;_http_request._path = WROOT;_http_request._path += path;// 访问的是根目录, 换成主页if (_http_request._path[_http_request._path.size() - 1] == '/'){_http_request._path += HOME_PAGE;}if (stat(_http_request._path.c_str(), &st) == 0){// 访问的是目录if (S_ISDIR(st.st_mode)){// 不允许访问目录,请求目录,设置为这个目录的主页_http_request._path += "/";_http_request._path += HOME_PAGE;// 上面修改了路径,重新获取stat(_http_request._path.c_str(), &st);}// 访问可执行程序if ((st.st_mode & S_IXUSR) || (st.st_mode & S_IXGRP) || (st.st_mode & S_IXOTH)){std::cout << "访问程序:" << _http_request._path << std::endl;// 特殊处理_http_request._cgi = true;}_http_request._size = st.st_size;}else{// 资源不存在LOG(WARNING, _http_request._path + "NOT FOUND");code = NOT_FOUND;goto END;}// std::cout << "path:" << _http_request._path << std::endl;// suffixfound = _http_request._path.rfind(".");if (found == std::string::npos){_http_request._suffix = ".html";}else{_http_request._suffix = _http_request._path.substr(found);}// 是否cgi处理if (_http_request._cgi == true){code = ProcessCgi();  // 执行目标程序,拿到结果:正文}else{// 目标网页一定存在// 返回要构建http响应code = ProcessNoCgi(); // 简单的网页处理,返回静态网页,只需要打开即可 }
END:// 构建错误响应BuildHttpResponseHelper();  // 状态行填充了,报头有了,空行有了,正文有了}void SendHttpResponse(){//std::cout << "status_line" << _http_response._status_line << std::endl;// for (auto it : _http_response._response_header)// {//     //std::cout << "status_head" << _http_response._status_line << std::endl;// }send(_sock, _http_response._status_line.c_str(), _http_response._status_line.size(), 0);for (auto it : _http_response._response_header){send(_sock, it.c_str(), it.size(), 0);}send(_sock, _http_response._blank.c_str(), _http_response._blank.size(), 0);//std::string con = "hello world";if (_http_request._cgi){// 内容在response里auto &response_body = _http_response.__response_body;size_t size = 0;size_t total = 0;const char *start = response_body.c_str();while ((total < response_body.size()) && (size = send(_sock, start + total, response_body.size() - total, 0)) > 0){total += size;}}else{// 发送打开的文件sendfile(_sock, _http_response._fd, nullptr, _http_request._size);close(_http_response._fd);}}bool IsStop(){return _stop;}~EndPoint(){}private:int _sock;HttpRequest _http_request;HttpResponse _http_response;bool _stop;
};class CallBack
{
public:CallBack(){}void operator()(int sock){HandlerRequest(sock);}void HandlerRequest(int sock){LOG(INFO, "handler request begin...");//int sock = *(int*)tmp_sock;//delete tmp_sock;#ifdef DEBUGstd::cout << "begin---------------------------" << sock << std::endl;char buff[4096];recv(sock, buff, sizeof(buff), 0);std::cout << buff;std::cout << "end-----------------------------" << sock << std::endl;
#elseEndPoint *ep = new EndPoint(sock);ep->RecvHttpRequest();if (!ep->IsStop()){LOG(INFO, "recv success, begin build and send");ep->BuildHttpResponse();ep->SendHttpResponse();}else{LOG(INFO, "recv error, stop");}delete ep;
#endifLOG(INFO, "handle request end...");//return nullptr;}~CallBack(){}
};

日志打印

Log.hpp

#pragma once
#include <iostream>
#include <string>
//#include <time.h>#define INFO    1
#define WARNING 2
#define ERROR   3
#define FATAL   4#define LOG(level, message) Log(#level, message, __FILE__, __LINE__) void Log(std::string level, std::string message, std::string filename, int line)
{std::cout << "[" << level << "]" << "[" << time(nullptr) << "]" << "[" << filename << "]"<< "[" << line << "]: " << message << std::endl;
}

CGI程序

test_cgi.cc

#include <iostream>
#include <stdlib.h>
#include <unistd.h>
using namespace std;bool GetQueryString(string& query_string)
{bool result = false;string method = getenv("METHOD");// 标准输出被重定向了,用标准错误// 获取环境变量//cerr << "debug method:" << method << endl;if (method == "GET"){query_string = getenv("QUERY_STRING");cerr << "debug query_string:" << query_string << endl;return true;}else if (method == "POST"){// 如何知道读取多少个字节//cerr << "content-length:" << getenv("CONTENT_LENGTH") << endl;int content_length = atoi(getenv("CONTENT_LENGTH"));char c = 0;while (content_length){read(0, &c, 1);query_string.push_back(c);content_length--;}//cerr << "post debug query_string:" << query_string << endl;return true;}else{return false;}
}void CutString(string in, string sep, string& out1, string& out2)
{auto pos = in.find(sep);if (pos != string::npos){out1 = in.substr(0, pos);out2 = in.substr(pos + sep.size());}
}int main()
{string query_string;GetQueryString(query_string);// a=100&b=200string str1, str2;CutString(query_string, "&", str1, str2);string name1, value1;CutString(str1, "=", name1, value1);string name2, value2;CutString(str2, "=", name2, value2);    // cerrcerr << name1 << ":" << value1 << endl;cerr << name2 << ":" << value2 << endl;// 管道写入cout << name1 << ":" << value1 << endl;cout << name2 << ":" << value2 << endl; // 可能计算,存储,搜索,注册登录等int x = atoi(value1.c_str());int y = atoi(value2.c_str());cout << "<html>";cout << "<head><meta charset=\"utf-8\"></head>";cout << "<body>";cout << "<h3>" << value1 << "+" << value2 << "=" << x + y << "</h3>";cout << "<h3>" << value1 << "-" << value2 << "=" << x - y << "</h3>";cout << "<h3>" << value1 << "*" << value2 << "=" << x * y << "</h3>";cout << "<h3>" << value1 << "/" << value2 << "=" << x / y << "</h3>";cout << "</body>";cout << "</html>";return 0;
}

网页部分

index.html

<!DOCTYPE html>
<html lang="en" dir="ltr"><head><!-- required meta --><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- #keywords --><meta name="keywords" content="boot, Bootstrap, It Solutions , Business Services, Techxly HTML Template"><!-- #description --><meta name="description" content="IT Solutions & Business Services Multipurpose Responsive Website Template"><!-- #title --><title>Techxly - IT Solutions & Business Services Template</title><!-- #favicon --><link rel="shortcut icon" href="assets/images/fav.png" type="image/x-icon"><!-- AOS  --><link rel="stylesheet" href="static/css/aos.css"><!-- ==== css dependencies start ==== --><link rel="stylesheet" href="static/css/style.css"><!-- tilt  --><!-- ICON  --><script src="static/js/web.js"></script><!-- lightbox  --><link rel="stylesheet" href="static/css/glightbox.min.css"></head><body><button id="rtlBtn">rtl</button><!-- header-section start --><header class="header-section header-menu w-100 pt-1 pt-lg-0 pb-3 pb-lg-0"><div class="navbar_mainhead header-fixed w-100"><div class="container"><div class="row align-items-center"><div class="col-12"><nav class="navbar navbar-expand-lg position-relative d-flex gap-5 align-items-center"><div><a href="" class="navbar-brand d-none d-sm-flex align-items-center gap-2"><img src="static/picture/logo.png" class="logo" alt="logo"></a><a href="" class="navbar-brand d-sm-none d-flex align-items-center gap-2"><img src="static/picture/fav.png" class="shortlogo" alt="logo"></a></div><div class="collapse navbar-collapse" id="navbar-content"><ul class="navbar-nav d-flex align-items-lg-center gap-5 gap-lg-1 gap-xl-4 gap-xxl-5 py-2 py-lg-0 ms-2 ms-xl-10 ms-xxl-20 ps-0 ps-xxl-10 align-self-center"><li class="dropdown"><a href="" class="fs-ten">Home</a></li><li class="dropdown show-dropdown"><a href="services.html" class="fs-ten">Services</a></li><li class="dropdown show-dropdown"><a href="testimonials.html" class="fs-ten">Testimonials</a></li><li class="dropdown show-dropdown"><a href="team.html" class="fs-ten">Team</a></li><li class="dropdown show-dropdown dropdown_btn"><button type="button" aria-label="Navbar Dropdown Button" class="dropdown-toggle dropdown-nav d-flex gap-1 align-items-center fs-ten">Menu <i class="ph-bold ph-caret-down"></i></button><ul class="dropdown-menu drop_menu"><li><a class="dropdown-item fs-ten" href="about.html">About</a></li><li><a class="dropdown-item fs-ten" href="blog_details.html">Blog Details</a></li><li><a class="dropdown-item fs-ten" href="price.html">Pricing</a></li><li><a class="dropdown-item fs-ten" href="faqs.html">FAQs</a></li><li><a class="dropdown-item fs-ten" href="portfolio.html">Portfolio</a></li><li><a class="dropdown-item fs-ten" href="contact.html">Contact</a></li><li><a class="dropdown-item fs-ten" href="terms.html">Terms Conditions</a></li><li><a class="dropdown-item fs-ten" href="privacy.html">Privacy Policy</a></li></ul></li><li class="dropdown show-dropdown"><a href="blog.html" class="fs-ten">Blog</a></li></ul></div><div><div class="right-area custom-pos position-relative d-flex gap-0 gap-xl-5 align-items-center"><button id="toggle" class="dark_btn d-flex justify-content-center align-items-center fs-three p6-color mood_toggle"><i class="ph-fill ph-moon fs-five" id="mood_icon"></i></button><a href="contact.html" class="btn p6-color d-none d-xl-block"><span class="btn-text-one">Get Quotes</span><span class="btn-text-two">Get Quotes</span></a></div><button class="navbar-toggler mt-1" type="button" data-bs-toggle="collapse" aria-label="Navbar Toggler" data-bs-target="#navbar-content" aria-expanded="true" id="nav-icon3"><span></span><span></span><span></span><span></span></button></div></nav></div></div></div></div></header><!-- header-section end --><!-- Hero section start --><section class="hero-bg overflow-hidden"><div class="particles_hero"><div class="container h-100"><div class="row g-lg-6 align-items-center pt-20 h-100"><div class="col-xxl-7 h-100 hero-bg-content"><div class="d-flex align-items-center justify-content-center h-100"><div><div data-aos="fade-up" data-aos-duration="800" class="hero_hot w-100 d-flex gap-3 align-items-center px-3 px-lg-5 py-2 py-lg-3 rounded-pill mb-3 mb-lg-6"><button class="px-3 px-lg-5 py-2 rounded-pill w3-color bg3-color">🚀 New</button><span class="w3-color">Next - Level IT Solutions</span></div><h2 class="display-two fw-bold mb-3 mb-lg-5 w3-color" data-aos="fade-up" data-aos-duration="800">Trusted<span class="y1-color">IT Solutions</span>& Cyber Security</h2><div class="d-flex flex-wrap align-items-center gap-4 gap-md-8 align-items-center"><div class="d-flex gap-2 align-items-center"><img src="static/picture/quality.png" alt="..."><span class="fs-ten w3-color">Supreme Quality Services</span></div><div class="d-flex gap-2 align-items-center"><img src="static/picture/satisfaction.png" alt="..."><span class="fs-ten w3-color">Promise of Satisfaction</span></div></div><div data-aos="fade-down" data-aos-duration="800"><div class="d-flex flex-wrap gap-3 gap-md-6 my-5 my-md-10" data-aos="fade-down"><a href="contact.html" class="btn"><span class="btn-text-one d1-color">Get Quotes</span><span class="btn-text-two d1-color">Get Quotes</span></a><button class="btn-outline w2-color"><span class="btn-text-one">Get Started</span><span class="btn-text-two">Get Started</span></button></div><div class="d-flex flex-wrap gap-3"><a href="javascriopt:void(0)" class="hero_icon d-flex justify-content-center align-items-center"><i class="ph ph-facebook-logo fs-six"></i></a><a href="javascriopt:void(0)" class="hero_icon d-flex justify-content-center align-items-center"><i class="ph ph-x-logo fs-six"></i></a><a href="javascriopt:void(0)" class="hero_icon d-flex justify-content-center align-items-center"><i class="ph ph-linkedin-logo fs-six"></i></a><a href="javascriopt:void(0)" class="hero_icon d-flex justify-content-center align-items-center"><i class="ph ph-youtube-logo fs-six"></i></a><a href="javascriopt:void(0)" class="hero_icon d-flex justify-content-center align-items-center"><i class="ph ph-instagram-logo fs-six"></i></a></div></div></div></div></div><div class="col-xxl-5 d-none d-xxl-block"><div data-tilt=""><img src="static/picture/hero-img.png" alt="hero" class="hero-img object-fit-cover"></div></div></div></div></div></section><!-- Hero section end --><!-- service section start  --><section class="position-relative pt-120 pb-120"><div class="container"><div class="d-flex flex-wrap gap-6 justify-content-between align-items-end" data-aos="fade-down" data-aos-duration="800"><div class="service_heading"><span class="fs-ten fw-semibold g2-color mb-2">Our Services</span><h2 class="fs-two fw-semibold d1-color mb-6">What We’re <span class="y2-color">Offering?</span></h2><p class="fs-ten d2-color">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative multipurpose design you can use Best services& IT solutions.</p></div><div><a href="services.html" class="btn d1-color"><span class="btn-text-one">See Services</span><span class="btn-text-two">See Services</span></a></div></div><div class="row g-3 g-sm-5 mt-7 mt-lg-15"><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="service-card bgc1-color position-relative z-3 text-center px-10 py-8"><img src="static/picture/apps.png" alt="apps" width="80" height="80"><h4 class="fs-five fw-semibold d2-color mt-8 mb-4">Apps Development</h4><p class="d2-color fs-ten">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div></div><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="800"><div class="service-card bgc1-color position-relative z-3 text-center px-10 py-8"><img src="static/picture/web.png" alt="apps" width="80" height="80"><h4 class="fs-five fw-semibold d2-color mt-8 mb-4">Web Development</h4><p class="d2-color fs-ten">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div></div><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="900"><div class="service-card bgc1-color position-relative z-3 text-center px-10 py-8"><img src="static/picture/degital.png" alt="apps" width="80" height="80"><h4 class="fs-five fw-semibold d2-color mt-8 mb-4">Digital Marketing</h4><p class="d2-color fs-ten">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div></div><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="service-card bgc1-color position-relative z-3 text-center px-10 py-8"><img src="static/picture/seo.png" alt="apps" width="80" height="80"><h4 class="fs-five fw-semibold d2-color mt-8 mb-4">SEO Optimization</h4><p class="d2-color fs-ten">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div></div><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="800"><div class="service-card bgc1-color position-relative z-3 text-center px-10 py-8"><img src="static/picture/hosting.png" alt="apps" width="80" height="80"><h4 class="fs-five fw-semibold d2-color mt-8 mb-4">Web Hosting</h4><p class="d2-color fs-ten">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div></div><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="900"><div class="service-card bgc1-color position-relative z-3 text-center px-10 py-8"><img src="static/picture/security.png" alt="apps" width="80" height="80"><h4 class="fs-five fw-semibold d2-color mt-8 mb-4">Data Secuity</h4><p class="d2-color fs-ten">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div></div></div></div><div class="rocket-img d-none d-xl-block"><img src="static/picture/rocket.png" alt="rocket"></div></section><!-- service section end  --><!-- Our Process Flow start --><section class="process-work-bg pt-120 pb-120 bg7-color"><div class="container"><div class="d-flex align-items-center justify-content-between"><div class="service_heading" data-aos="fade-down" data-aos-duration="800"><span class="fs-ten fw-semibold g1-color mb-2">Our Work Process</span><h2 class="fs-two fw-semibold w3-color">How it helps your <span class="y1-color">business succeed</span></h2><p class="w3-color mt-4 mt-md-8">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative multipurpose design you can use Best services& IT solutions.</p></div><div class="d-none d-md-flex align-items-center gap-2 position-relative pe-20 z-2"><div class="step-line"></div><span class="w3-color fs-five fw-semibold">STEPS</span><h1 class="work-step">03</h1></div></div><div class="row g-5 mt-7 mt-lg-15"><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class=""><div class="d-flex align-items-center gap-10"><div class="process_icon_bg d-flex flex-shrink-0 justify-content-center align-items-center position-relative"><img src="static/picture/service.png" alt="apps" width="60" height="60"><div class="process_icon_num d-flex justify-content-center align-items-center position-absolute">01</div></div><div class="h-100"><img src="static/picture/arrow.png" alt="..." class="arrow-img d-none d-xl-block"></div></div><h4 class="fs-five fw-semibold w3-color mt-4 mt-md-8 mb-2 mb-md-4">Choose a Service</h4><p class="w4-color fs-ten">We focus on the best practices for it solutions and services.</p></div></div><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class=""><div class="d-flex align-items-center gap-10"><div class="process_icon_bg d-flex flex-shrink-0 justify-content-center align-items-center position-relative"><img src="static/picture/meeting.png" alt="apps" width="60" height="60"><div class="process_icon_num d-flex justify-content-center align-items-center position-absolute">02</div></div><div class="h-100"><img src="static/picture/arrow.png" alt="..." class="arrow-img d-none d-xl-block"></div></div><h4 class="fs-five fw-semibold w3-color mt-4 mt-md-8 mb-2 mb-md-4">Request a Meeting</h4><p class="w4-color fs-ten">We focus on the best practices for it solutions and services.</p></div></div><div class="col-12 col-sm-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class=""><div class=""><div class="process_icon_bg d-flex flex-shrink-0 justify-content-center align-items-center position-relative"><img src="static/picture/service.png" alt="apps" width="60" height="60"><div class="process_icon_num d-flex justify-content-center align-items-center position-absolute">03</div></div></div><h4 class="fs-five fw-semibold w3-color mt-4 mt-md-8 mb-2 mb-md-4">Receive Custom Plan</h4><p class="w4-color fs-ten">We focus on the best practices for it solutions and services.</p></div></div></div><div class="process-ready mt-8 mt-md-15 p-5 p-md-10"><div class="d-flex flex-wrap gap-3 justify-content-between"><div class="d-flex flex-wrap gap-3 gap-md-6"><div><img src="static/picture/img1.png" alt="..." class="process-work-img"><img src="static/picture/img2.png" alt="..." class="process-work-img2"><img src="static/picture/img3.png" alt="..." class="process-work-img2"></div><div><span class="fs-seven w3-color d-block mb-1 mb-md-2">Ready to Get</span><span class="fs-ten g1-color">Let’s Discuss & Start IT Consultations</span></div></div><a href="contact.html" class="btn"><span class="btn-text-one d1-color">Get Quotes</span><span class="btn-text-two d1-color">Get Quotes</span></a></div></div></div></section><!-- Our Process Flow End --><!-- Who we are section start --><section class="pt-120 overflow-hidden"><div class="container"><div class="row g-7 g-md-10 pb-120"><div class="col-xl-6"><div class="position-relative"><img src="static/picture/who.png" alt="..."><div class="who-text-rotate d-none d-sm-block"><div class="position-relative"><img src="static/picture/text-rotate.png" alt="..." class="rotate-animain"><img src="static/picture/toppy.png" alt="topy" class="position-absolute start-0 end-0 top-0 bottom-0 m-auto"></div></div></div></div><div class="col-xl-6"><div class="service_heading" data-aos="fade-down" data-aos-duration="800"><span class="fs-ten fw-semibold g1-color mb-2">Who we are</span><h2 class="fs-two fw-semibold d1-color">We provide perfect How it helps your<span class="y2-color text-decoration-underline">it solutions & technology</span>for any startups</h2><p class="d2-color mt-4 mt-md-8">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative multipurpose design you can use Bestservices & IT solutions.</p><div class="d-flex align-items-center gap-4 gap-md-8 mt-4 mt-md-8"><img src="static/picture/code.png" alt="..."><p class="text-five fw-semibold d2-color code-title">We provide the most reasonable cost and best services.</p></div><div class="line my-4 my-md-8"></div><div class="row g-3 g-md-6"><div class="col-lg-6"><div class="d-flex align-items-center gap-3"><i class="ph ph-check g2-color fs-three"></i><span class="fs-ten d2-color mt-2 d-block">Quality control system</span></div></div><div class="col-lg-6"><div class="d-flex align-items-center gap-3"><i class="ph ph-check g2-color fs-three"></i><span class="fs-ten d2-color mt-2 d-block">Finish work before deadline</span></div></div><div class="col-lg-6"><div class="d-flex align-items-center gap-3"><i class="ph ph-check g2-color fs-three"></i><span class="fs-ten d2-color mt-2 d-block">Best ever plan</span></div></div><div class="col-lg-6"><div class="d-flex align-items-center gap-3"><i class="ph ph-check g2-color fs-three"></i><span class="fs-ten d2-color mt-2 d-block">Client free service</span></div></div></div><a href="contact.html" class="btn mt-4 mt-md-8"><span class="btn-text-one d1-color">Get Quotes</span><span class="btn-text-two d1-color">Get Quotes</span></a></div></div></div><!-- trusted clients --><div class="trusted-clients row g-5 g-lg-0 justify-content-center align-items-center bg2-color py-20"><div class="col-xl-4 px-4 px-sm-8 px-xl-0"><span class="fs-ten fw-medium g1-color">5+ Trusted Our Clients</span><h2 class="fs-two fw-semibold w3-color mt-2">Most Experienced<span class="y1-color text-decoration-underline">Our Services</span></h2><p class="fs-ten w4-color mt-4 mt-md-8">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div><div class="col-xl-6"><div class="row"><div class="col-6 col-md-4"><div class="trusted-counter px-4 px-md-8 py-5 py-md-10"><div class="trusted-img-bg"><img src="static/picture/happy-clients.png" alt="..."></div><h2 class="fs-two fw-semibold y1-color text-center mt-2 mt-md-4"><span class="counter">130</span>+</h2><span class="w3-color text-center d-block">Happy Clients</span></div></div><div class="col-6 col-md-4"><div class="trusted-counter px-4 px-md-8 py-5 py-md-10"><div class="trusted-img-bg"><img src="static/picture/done.png" alt="..."></div><h2 class="fs-two fw-semibold y1-color text-center mt-2 mt-md-4"><span class="counter">250</span>+</h2><span class="w3-color text-center d-block">Projects Done</span></div></div><div class="col-6 col-md-4"><div class="trusted-counter px-4 px-md-8 py-5 py-md-10"><div class="trusted-img-bg"><img src="static/picture/experts.png" alt="..."></div><h2 class="fs-two fw-semibold y1-color text-center mt-2 mt-md-4"><span class="counter">50</span>+</h2><span class="w3-color text-center d-block">Skilled Experts</span></div></div></div></div></div></div></section><!-- Who we are section end --><!-- our skills section start --><section class="our-skills-section pt-120 pb-120"><div class="container pt-120"><div class="row g-6 justify-content-between align-items-center"><div class="col-lg-5"><span class="fs-ten fw-medium g1-color">OUR SKILLS</span><h2 class="fs-two fw-semibold text-white mt-2">Explore our best recently<span class="y1-color">completed projects</span></h2><a href="contact.html" class="btn mt-5 mt-md-10"><span class="btn-text-one d1-color">Our Service</span><span class="btn-text-two d1-color">Our Service</span></a></div><div class="col-lg-6"><div class=""><div data-aos="fade-up"><div class="progress-bar-wrap"><div class="mb-1 d-flex justify-content-between"><span class="text-white fs-ten fw-semibold mb-2 d-block">DEVELOPMENT</span><span class="progress-value text-white fs-ten fw-semibold">85%</span></div><div class="progress-bar"><div class="progress-bar-inner"></div></div></div><div class="progress-bar-wrap mt-3 mt-md-6"><div class="mb-1 d-flex justify-content-between"><span class="text-white fs-ten fw-semibold mb-2 d-block">ENGINEERING</span><span class="progress-value text-white fs-ten fw-semibold">69%</span></div><div class="progress-bar"><div class="progress-bar-inner"></div></div></div><div class="progress-bar-wrap mt-3 mt-md-6"><div class="mb-1 d-flex justify-content-between"><span class="text-white fs-ten fw-semibold mb-2 d-block">WEB DESIGN</span><span class="progress-value text-white fs-ten fw-semibold">76%</span></div><div class="progress-bar"><div class="progress-bar-inner"></div></div></div></div></div></div></div></div></section><!-- our skills section end --><!-- Choose us section end --><section class="pt-120 pb-120 overflow-hidden"><div class="container"><div class="row g-5 g-md-10 align-items-center"><div class="col-xl-7"><div class="h-100"><div class="service_heading" data-aos="fade-down" data-aos-duration="800"><span class="fs-ten fw-semibold g1-color mb-2">Why Choose Us</span><h2 class="fs-two fw-semibold d2-color mb-6 w-100">We provide perfect it solutions & technology for any startups.</h2><p class="fs-ten d2-color">Start work with Techxly. Build responsive, mobile-firstprojects on the web with the world's most popular front-endcomponent library.</p></div><div class="mt-8 mt-lg-15"><div class="row g-4 g-lg-8"><div class="col-md-6" data-aos="fade-up" data-aos-duration="800"><img src="static/picture/high-security.png" alt="security" width="60" height="60"><h5 class="fs-five d2-color mt-3 mt-lg-6 mb-2 mb-lg-4">High Security</h5><p class="fs-ten d2-color">Techxly is a HTML5 template based on Sass and Bootstrap 5with modern and creative.</p></div><div class="col-md-6" data-aos="fade-up" data-aos-duration="900"><img src="static/picture/team.png" alt="security" width="60" height="60"><h5 class="fs-five d2-color mt-3 mt-lg-6 mb-2 mb-lg-4">Skilled Team</h5><p class="fs-ten d2-color">Techxly is a HTML5 template based on Sass and Bootstrap 5with modern and creative.</p></div><div class="col-md-6" data-aos="fade-up" data-aos-duration="800"><img src="static/picture/price.png" alt="security" width="60" height="60"><h5 class="fs-five d2-color mt-3 mt-lg-6 mb-2 mb-lg-4">Affordable Price</h5><p class="fs-ten d2-color">Techxly is a HTML5 template based on Sass and Bootstrap 5with modern and creative.</p></div><div class="col-md-6" data-aos="fade-up" data-aos-duration="900"><img src="static/picture/support.png" alt="security" width="60" height="60"><h5 class="fs-five d2-color mt-3 mt-lg-6 mb-2 mb-lg-4">24/7 Support</h5><p class="fs-ten d2-color">Techxly is a HTML5 template based on Sass and Bootstrap 5with modern and creative.</p></div></div></div><div class="mt-6 mt-lg-12 d-flex flex-wrap gap-4 gap-lg-8 d-flex align-items-center" data-aos="fade-up" data-aos-duration="800"><a href="contact.html" class="btn d1-color"><span class="btn-text-one">Get Quotes</span><span class="btn-text-two">Get Quotes</span></a><div class="d-flex align-items-center gap-lg-5"><div class="d-flex"><div class="choose_icon_width bgy2-color d-flex flex-shrink-0 justify-content-center align-items-center"><i class="ph ph-phone-call text-white fs-three"></i></div></div><a href="tel:+4733378901" class="choose-num d2-color fw-semibold fs-six">(+44) 152-567-987</a></div></div></div></div><div class="col-xl-5" data-aos="zoom-in" data-aos-duration="800"><div class=""><img class="choose_us object-fit-cover" src="static/picture/choose_us.png" alt="..."></div></div></div></div></section><!-- Choose us section End --><!-- INDUSTRY WE SERVE section start --><section class="industry-section pt-120 pb-120 overflow-hidden"><div class="container"><div class="process_heading text-center" data-aos="fade-down" data-aos-duration="800"><span class="fs-ten g1-color">INDUSTRY WE SERVE</span><h3 class="w3-color fs-two">Our industry<span class="y2-color text-decoration-underline">expertise & solutions</span></h3><p class="fs-ten w3-color mt-3 mt-md-6">Techxly is a HTML5 template based on Sass and Bootstrap 5 withmodern and creative.</p></div><div class="pt-60 position-relative"><div class="swiper service_slider"><div class="swiper-wrapper d-flex align-items-center"><div class="swiper-slide"><div class="industry-items"><div class="px-8 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-graduation-cap fs-four"></i></div><span class="text-sm w-100 w3-color d-block mt-3 mt-md-5 text-center">Education</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-shopping-cart fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">eCommerce</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-heartbeat fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Healthcare</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-bank fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Finance</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-car fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Automotive</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-laptop fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Software</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-heartbeat fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Healthcare</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-bank fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Finance</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-car fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Automotive</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div><div class="swiper-slide"><div class="industry-items"><div class="px-10 py-5 brd3 d-flex flex-column justify-content-start align-items-center rounded-4 item"><div class="d-flex justify-content-center align-items-center icon"><i class="ph ph-laptop fs-four"></i></div><span class="text-sm w3-color d-block mt-3 mt-md-5">Software</span><div class="industry-link"><a href="javascript:void(0)" class="industry-link-icon d-flex align-items-center justify-content-center mt-3 mt-md-5 link-icon"><i class="ph ph-arrow-up-right"></i></a></div></div></div></div></div></div></div></div></section><!-- INDUSTRY WE SERVE section end --><!-- Protfolio section start --><section class="pt-120 bg7-color overflow-hidden"><div class="process_heading text-center" data-aos="fade-down" data-aos-duration="800"><span class="fs-ten fw-semibold g1-color mb-2 text-center">Recent Work Highlights</span><h2 class="fs-two fw-semibold d2-color mb-3 mb-lg-6">Highlighting Our Most Notable Work and<span class="y2-color text-decoration-underline">Successful Projects</span></h2><p class="fs-ten d2-color">Techxly is a HTML5 template based on Sass and Bootstrap 5 with modernand creative multipurpose design you can use Best services & ITsolutions.</p></div><!-- tab --><div><ul data-aos="zoom-in" data-aos-duration="800" class="tabs d-flex gap-3 gap-md-0 justify-content-center flex-wrap p-2 mt-8 mt-lg-15 mb-4 md:mb-8"><li data-tab-target="#all" class="active cursor-pointer d2-color border cus-border border-six rounded-pill px-3 px-md-6 py-2 py-md-3 tab">All</li><li data-tab-target="#branding" class="cursor-pointer d2-color border cus-border border-six rounded-pill px-3 px-md-6 py-2 py-md-3 tab">Branding</li><li data-tab-target="#design" class="cursor-pointer d2-color border cus-border border-six rounded-pill px-3 px-md-6 py-2 py-md-3 tab">Design</li><li data-tab-target="#development" class="cursor-pointer d2-color border cus-border border-six rounded-pill px-3 px-md-6 py-2 py-md-3 tab">Development</li><li data-tab-target="#solution" class="cursor-pointer d2-color border cus-border border-six rounded-pill px-3 px-md-6 py-2 py-md-3 tab">It Solution</li></ul><div class="tab-content position-relative"><div id="all" data-tab-content="" class="active"><div class="row g-3"><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w1.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w2.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w3.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w4.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w5.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w6.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div></div></div><!-- branding --><div id="branding" data-tab-content=""><div class="row g-3"><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w2.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w3.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w5.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w6.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div></div></div><!-- degine --><div id="design" data-tab-content=""><div class="row g-3"><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w2.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w3.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w4.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w5.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div></div></div><!-- development --><div id="development" data-tab-content=""><div class="row g-3"><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w2.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w3.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w5.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w6.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div></div></div><!-- solution --><div id="solution" data-tab-content=""><div class="row g-3"><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w1.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w2.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w3.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w4.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="700"><div class="single_project position-relative z-1"><div><img src="static/picture/w5.png" class="w-full" alt="..."></div><a href="javascript:void(0)" class="d-flex gap-2 justify-content-between bgc1-color project-content z-2"><div class="p-3 p-md-5"><h4 class="p2-color fs-five mb-2 mb-md-3">App for Virtual Reality</h4><span class="d2-color fs-seven">App Development </span></div><div class="project-content-right d-flex align-items-center justify-content-center bgy1-color px-5"><i class="ph-bold ph-arrow-right d1-color fs-five"></i></div></a></div></div></div></div></div></div></section><!-- Protfolio section end  --><!-- Choose plan section start --><section class="pt-120 pb-120"><div class="container"><div class="process_heading text-center" data-aos="fade-down" data-aos-duration="800"><span class="fs-ten fw-semibold g2-color mb-2 text-center">Choose Your Plan</span><h2 class="fs-two fw-semibold d2-color mb-3 mb-lg-6">Choose the right plan for<span class="y2-color text-decoration-underline">your business</span></h2><p class="fs-ten d2-color">Build responsive, mobile-first projects on the web with the world'smost popular front-end component library.</p></div><div class="mt-8 mt-lg-15"><div class="row g-6"><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="800"><div class="position-relative pricing_section"><div class="bgc1-color pricing-card"><div class="px-4 px-lg-8 pt-5 pt-lg-10"><h4 class="fs-seven d2-color fw-normal wider">STARTUP</h4><div class="d-flex gap-1"><h3 class="display-one fw-semibold p2-color">$29</h3><span class="fs-three p2-color fw-semibold">$</span></div><span class="fs-ten fw-normal d3-color wider">Per Month</span><ul class="my-5 my-md-10"><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Web & Mobile-Optimizeds</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Free Custom Domain Serve</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Best Hosting on the Market</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Outstanding Support</span></li></ul></div><a href="javascript:void(0)" class="d-flex justify-content-center align-items-center gap-1 bgd1-color fs-six w2-color w-100 py-2 py-md-4 price_btn">Purchase Now<i class="ph ph-arrow-right"></i></a></div></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="800"><div class="position-relative pricing_section"><div class="bgc1-color pricing-card"><div class="px-4 px-lg-8 pt-5 pt-lg-10"><h4 class="fs-seven d2-color fw-normal wider">STANDARD</h4><div class="d-flex gap-1"><h3 class="display-one fw-semibold p2-color">$49</h3><span class="fs-three p2-color fw-semibold">$</span></div><span class="fs-ten fw-normal d3-color wider">Per Month</span><ul class="my-5 my-md-10"><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Web & Mobile-Optimizeds</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Free Custom Domain Serve</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Best Hosting on the Market</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Outstanding Support</span></li></ul></div><a href="javascript:void(0)" class="d-flex justify-content-center align-items-center gap-1 bgd1-color fs-six w2-color w-100 py-2 py-md-4 price_btn">Purchase Now<i class="ph ph-arrow-right"></i></a></div></div></div><div class="col-md-6 col-xl-4" data-aos="fade-up" data-aos-duration="800"><div class="position-relative pricing_section"><div class="bgc1-color pricing-card"><div class="px-4 px-lg-8 pt-5 pt-lg-10"><h4 class="fs-seven d2-color fw-normal wider">PREMIUM</h4><div class="d-flex gap-1"><h3 class="display-one fw-semibold p2-color">$99</h3><span class="fs-three p2-color fw-semibold">$</span></div><span class="fs-ten fw-normal d3-color wider">Per Month</span><ul class="my-5 my-md-10"><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Web & Mobile-Optimizeds</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Free Custom Domain Serve</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Best Hosting on the Market</span></li><li class="d-flex gap-3 align-items-center mb-2 mb-md-3"><i class="ph ph-check g2-color fs-five"></i><span class="fs-tex d2-color">Outstanding Support</span></li></ul></div><a href="javascript:void(0)" class="d-flex justify-content-center align-items-center gap-1 bgd1-color fs-six w2-color w-100 py-2 py-md-4 price_btn">Purchase Now<i class="ph ph-arrow-right"></i></a></div></div></div></div></div></div></section><!-- Choose plan section end --><!-- Our clients section start --><section class="pt-120 pb-120 our_clients overflow-x-hidden"><div class="container"><div class="service_heading"><span class="fs-ten fw-semibold g2-color mb-2">Our Clients</span><h2 class="fs-two fw-semibold d1-color mb-6">We love to work with<span class="y2-color text-decoration-underline">clients to develop</span>unique, innovative websites.</h2><p class="fs-ten d2-color">Build responsive, mobile-first projects on the web with the world'smost popular front-end component library.</p></div><div class="mt-8 mt-md-15" data-aos="zoom-out-up"><div class="swiper clients_slider"><div class="swiper-wrapper d-flex align-items-center"><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner1.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner2.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner3.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner4.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner5.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner6.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner7.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner8.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner9.png" alt="logo"></div></div></div></div><div class="swiper clients_slider2 mt-4 mt-md-8"><div class="swiper-wrapper d-flex align-items-center"><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner1.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner2.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner3.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner4.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner5.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner6.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner7.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner8.png" alt="logo"></div></div><div class="swiper-slide"><div class="px-4 px-md-8 py-5 py-md-10 bgw3-color d-flex align-items-center justify-content-center"><img src="static/picture/partner9.png" alt="logo"></div></div></div></div></div></div></section><!-- Our clients section end --><!-- Testimonials section start --><section class="testimonial pt-120 pb-120"><div class="process_heading text-center"><span class="fs-ten fw-semibold g2-color mb-2 text-center">💖 Real results from real clients</span><h2 class="fs-two fw-semibold d1-color mb-4 mb-md-8">See how we've helped our<span class="y2-color text-decoration-underline">clients succeed</span></h2><p class="fs-ten d2-color">More than 1500+ agencies using Techxly.Build faster websites withtechxly. IT’s a highly Customizable,creative, modern, visuallystunning and Bootstrap5 HTML5 Template.</p></div><div class="mt-8 mt-lg-15 container"><div class="swiper testimonial_slider"><div class="swiper-wrapper"><div class="swiper-slide"><div class="px-3 px-md-6 py-5 py-md-10 bgc1-color"><div class="d-flex gap-1 mb-3"><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i></div><p class="d2-color fs-six">?I highly recommend techxly to anyone looking for ahigh-quality Bootstrap theme.?                </p><div class="d-flex gap-3 align-items-center mt-4 mt-md-7"><img src="static/picture/team3.png" alt=" testimon" class="testimonial_img"><span class="fs-eleven d-block d2-color fw-medium">By Dennis Maxwell</span></div></div></div><div class="swiper-slide"><div class="px-3 px-md-6 py-5 py-md-10 bgc1-color"><div class="d-flex gap-1 mb-3"><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i></div><p class="d2-color fs-six">Techxly is the perfect theme for businesses that want tocreate a stylish and functional website.</p><div class="d-flex gap-3 align-items-center mt-4 mt-md-7"><img src="static/picture/team5.png" alt=" testimon" class="testimonial_img"><span class="fs-eleven d-block d2-color fw-medium">By Jhon Doe</span></div></div></div><div class="swiper-slide"><div class="px-3 px-md-6 py-5 py-md-10 bgc1-color"><div class="d-flex gap-1 mb-3"><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i></div><p class="d2-color fs-six">Techxly helped us create a stunning website that reflects ourbrand perfectly.</p><div class="d-flex gap-3 align-items-center mt-4 mt-md-7"><img src="static/picture/team6.png" alt=" testimon" class="testimonial_img"><span class="fs-eleven d-block d2-color fw-medium">By Rose Li</span></div></div></div><div class="swiper-slide"><div class="px-3 px-md-6 py-5 py-md-10 bgc1-color"><div class="d-flex gap-1 mb-3"><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i><i class="ph-fill ph-star y1-color"></i></div><p class="d2-color fs-six">?I highly recommend techxly to anyone looking for ahigh-quality Bootstrap theme.?                </p><div class="d-flex gap-3 align-items-center mt-4 mt-md-7"><img src="static/picture/team7.png" alt=" testimon" class="testimonial_img"><span class="fs-eleven d-block d2-color fw-medium">By Russel Stevens</span></div></div></div></div></div></div></section><!-- Testimonials section end --><!-- Discuss project section start --><section class="dicscuss_projects parallax overflow-hidden"><div class="container pt-120 pb-120"><div class="row"><div class="col-lg-6"></div><div class="col-lg-6"><div class="d-flex align-items-center justify-content-center px-2 px-md-5"><div class="dicscuss-content"><span class="fs-ten fw-semibold g2-color mb-2">We Carry More Than Just Good Coding Skills</span><h2 class="fs-two fw-semibold w3-color mb-3 mb-lg-6">Let's Discuss your <span class="y1-color">Projects</span></h2><p class="fs-ten w3-color">We pride ourselves with our ability to perform and deliverresults. Use the form below to discuss your project needs withour team, we will get back asap.</p><div class="mt-5 mt-lg-10 d-flex flex-wrap gap-4 gap-lg-8 d-flex align-items-center"><a href="contact.html" class="btn"><span class="btn-text-one d1-color">Get Quotes</span><span class="btn-text-two d1-color">Get Quotes</span></a><div class="d-flex align-items-center gap-3 gap-lg-5"><div class="d-flex"><div class="choose_icon_width bgg1-color d-flex justify-content-center align-items-center"><i class="ph ph-phone-call text-white fs-three"></i></div><div class="choose_icon_width choose_img"><img src="static/picture/chooseImg.png" alt="..."></div></div><a href="tel:+4733378901" class="w3-color fw-semibold fs-six">(+44) 152-567-987</a></div></div></div></div></div></div></div></section><!-- Discuss project section end --><!-- Our Team Section star --><section class="pt-120 pb-120"><div class="container"><div class="process_heading text-center" data-aos="fade-up" data-aos-duration="800"><span class="fs-ten fw-semibold g2-color mb-2 text-center">Our Team</span><h2 class="fs-two fw-semibold d2-color mb-3 mb-lg-6">Meet the<span class="y2-color text-decoration-underline">Masterminds</span></h2><p class="fs-ten d2-color">Build responsive, mobile-first projects on the web with the world'smost popular front-end component library.</p></div><div class="row g-6 mt-8 mt-md-15"><div class="col-sm-6 col-lg-4 col-xl-3"><div data-aos="fade-up" class="team_card"><div class="thumb"><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team1.png" alt="..." class="w-100 rounded-3"></div></div><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team1.png" alt="..." class="w-100 rounded-3"></div></div></div><div class="px-4 px-md-8 pt-4 pt-md-8"><span class="y2-color">CHIEF EXECUTIVE</span><h4 class="d2-color text-four fw-semibold mt-2 mb-3">Manny Danile</h4><div class="p2-color"><a href="javascript:void(0)" class="p2-color fs-eight socal-icon">FB</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">TW</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">IN</a></div></div></div></div><div class="col-sm-6 col-lg-4 col-xl-3"><div data-aos="fade-up" class="team_card"><div class="thumb"><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team2.png" alt="..." class="w-100 rounded-3"></div></div><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team2.png" alt="..." class="w-100 rounded-3"></div></div></div><div class="px-4 px-md-8 pt-4 pt-md-8"><span class="y2-color">CHIEF EXECUTIVE</span><h4 class="d2-color text-four fw-semibold mt-2 mb-3">Kenna Lara</h4><div class="p2-color"><a href="javascript:void(0)" class="p2-color fs-eight socal-icon">FB</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">TW</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">IN</a></div></div></div></div><div class="col-sm-6 col-lg-4 col-xl-3"><div data-aos="fade-up" class="team_card"><div class="thumb"><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team3.png" alt="..." class="w-100 rounded-3"></div></div><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team3.png" alt="..." class="w-100 rounded-3"></div></div></div><div class="px-4 px-md-8 pt-4 pt-md-8"><span class="y2-color">CHIEF EXECUTIVE</span><h4 class="d2-color text-four fw-semibold mt-2 mb-3">Jhone Doe</h4><div class="p2-color"><a href="javascript:void(0)" class="p2-color fs-eight socal-icon">FB</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">TW</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">IN</a></div></div></div></div><div class="col-sm-6 col-lg-4 col-xl-3"><div data-aos="fade-up" class="team_card"><div class="thumb"><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team4.png" alt="..." class="w-100 rounded-3"></div></div><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/team4.png" alt="..." class="w-100 rounded-3"></div></div></div><div class="px-4 px-md-8 pt-4 pt-md-8"><span class="y2-color">CHIEF EXECUTIVE</span><h4 class="d2-color text-four fw-semibold mt-2 mb-3">Afa Rose</h4><div class="p2-color"><a href="javascript:void(0)" class="p2-color fs-eight socal-icon">FB</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">TW</a>-<a href="javascript:void(0)" class="p2-color fs-eight socal-icon">IN</a></div></div></div></div></div></div></section><!-- Our Team Section end --><!-- man user video section start --><section class="man-user-video"><div class="d-flex gap-2 align-items-center justify-content-center h-100"><a href="#" class="glightbox3"><div class="video-btn cursor brn1 n1-color d-flex align-items-center justify-content-center video-modal-button-open"><i class="ph-fill ph-play fs-two y2-color"></i></div></a></div></section><!-- man user video section end --><!-- Blogs section star --><section class="pt-120 pb-120 overflow-hidden"><div class="container"><div class="d-flex flex-wrap gap-2 justify-content-between align-items-end"><div><span class="fs-ten g2-color fw-medium">Our News Updates</span><h3 class="fs-two d1-color fw-semibold mt-2 mb-3 mb-md-6">Latest articles & news From the blogs</h3><span class="d2-color fs-ten">More than 1500+ agencies using Techxly</span></div><a href="contact.html" class="btn"><span class="btn-text-one d1-color">All Articles</span><span class="btn-text-two d1-color">All Articles</span></a></div><div class="row g-6 mt-8 mt-md-15"><div class="col-md-6 col-lg-4"><div class="blog_card"><div class="thumb"><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/blog1.jpg" alt="..." class="blog_image w-100 rounded-3"></div></div><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/blog1.jpg" alt="..." class="blog_image w-100 rounded-3"></div></div></div><div class="p-5"><span class="p2-color p-2 bg21-color rounded-pill">STARTUP</span><a href="javascript:void(0)" class="fs-five d1-color mt-2 mt-md-3 mb-3 mb-md-6 d-block fw-bold">You will destroy yourself financially if you save</a><div class="d-flex gap-2 flex-wrap justify-content-between align-items-center"><div class="d-flex gap-2 align-items-center"><img src="static/picture/team3.png" alt=" testimon" class="testimonial_img"><span class="fs-eleven d-block d2-color fw-medium">Dennil Sami</span></div><span class="d2-color">Jan 26, 2024 </span></div></div></div></div><div class="col-md-6 col-lg-4"><div class="blog_card"><div class="thumb"><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/blog2.png" alt="..." class="blog_image w-100 rounded-3"></div></div><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/blog2.png" alt="..." class="blog_image w-100 rounded-3"></div></div></div><div class="p-5"><span class="y2-color p-2 bgy21-color rounded-pill">DOMAIN & HOSTING</span><a href="javascript:void(0)" class="fs-five d1-color mt-2 mt-md-3 mb-3 mb-md-6 d-block fw-bold">How to host website on any hosting provider?</a><div class="d-flex gap-2 flex-wrap justify-content-between align-items-center"><div class="d-flex gap-2 align-items-center"><img src="static/picture/team5.png" alt=" testimon" class="testimonial_img"><span class="fs-eleven d-block d2-color fw-medium">Jhone Doe</span></div><span class="d2-color">Apr 16, 2024 </span></div></div></div></div><div class="col-md-6 col-lg-4"><div class="blog_card"><div class="thumb"><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/blog3.png" alt="..." class="blog_image w-100 rounded-3"></div></div><div class="post-thumb"><div class="post-thumb-inner"><img src="static/picture/blog3.png" alt="..." class="blog_image w-100 rounded-3"></div></div></div><div class="p-5"><span class="g2-color p-2 bgg21-color rounded-pill">STRATEGY</span><a href="javascript:void(0)" class="fs-five d1-color mt-2 mt-md-3 mb-3 mb-md-6 d-block fw-bold">You will destroy yourself financially if you save</a><div class="d-flex gap-2 flex-wrap justify-content-between align-items-center"><div class="d-flex gap-2 align-items-center"><img src="static/picture/team8.png" alt=" testimon" class="testimonial_img"><span class="fs-eleven d-block d2-color fw-medium">David Smith</span></div><span class="d2-color">May 10, 2024 </span></div></div></div></div></div></div></section><!-- Blogs section end --><!-- FAQs section start --><section class="pt-120 pb-120 bgc1-color"><div class="container"><div class="process_heading text-center" data-aos="fade-down"><span class="fs-ten fw-semibold g2-color mb-2 text-center">FAQ's</span><h2 class="fs-two fw-semibold d2-color mb-3 mb-lg-6">Frequently Asked<span class="y2-color text-decoration-underline">Questions</span></h2><p class="fs-ten d2-color">Build responsive, mobile-first projects on the web with the world'smost popular front-end component library.</p></div><div class="row g-2 g-md-6 mt-5 mt-md-10"><div class="col-lg-6"><div data-aos="fade-up" class="p-4 p-md-8 mb-2 mb-md-4 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center rounded-2"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">Can you provide of all IT Managenment services?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div><div data-aos="fade-up" class="p-4 p-md-8 mb-2 mb-md-4 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center rounded-2"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">Can I change plans later on?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div><div data-aos="fade-up" class="p-4 p-md-8 mb-2 mb-md-4 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center rounded-2 cursor-pointer"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">Can I try before I buy?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div><div data-aos="fade-up" class="p-4 p-md-8 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center rounded-2"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">Will I Receive Future Updates?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div></div><div class="col-lg-6"><div data-aos="fade-up" class="p-4 p-md-8 mb-2 mb-md-4 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">Is this Servies work in my Country?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div><div data-aos="fade-up" class="p-4 p-md-8 mb-2 mb-md-4 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">How much I will pay?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div><div data-aos="fade-up" class="p-4 p-md-8 mb-2 mb-md-4 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">how can i sign up the contract?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div><div data-aos="fade-up" class="p-4 p-md-8 mb-2 mb-md-4 cursor-pointer faq"><div class="question d-flex gap-3 justify-content-between align-items-center"><div class="d-flex gap-2 align-items-center"><div class="faq_icon_width d-flex flex-shrink-0 align-items-center justify-content-center"><i class="ph ph-arrow-right w2-color"></i></div><h3 class="d1-color fs-ten fw-bold">Can you handle ongoing maintenance?</h3></div><div class="position-relative"><i class="ph ph-minus d1-color fs-five"></i><i class="ph ph-minus fs-five position-absolute rotate-90 faqIcon ms-5 d1-color end-0"></i></div></div><div class="answer max-h-0 overflow-hidden"><p class="d2-color text-base font-medium leading-[150%] pt-3 pt-md-5">This is the first item's accordion body. It is hidden bydefault, until the collapse plugin adds the appropriateclasses that we use to style each element. These classescontrol the overall appearance, as well as the showing andhiding via CSS transitions. You can modify any of this withcustom CSS or overriding our default variables. It's alsoworth noting that just about any HTML can go withinthe .accordion-body, though the transition does limitoverflow.</p></div></div></div></div></div></section><!-- FAQs section end --><!-- Contact section start --><section class="pt-120 pb-120 bg7-color position-relative"><div class="container"><div class="process_heading text-center" data-aos="fade-down"><span class="fs-ten fw-semibold g2-color mb-2 text-center">Get in Touch</span><h2 class="fs-two fw-semibold d2-color mb-3 mb-lg-6">Let's start working together</h2><p class="fs-ten d2-color">Build responsive, mobile-first projects on the web with the world'smost popular front-end component library.</p></div><div class="row g-3 g-md-6 mt-5 mt-md-10 position-relative z-2"><div class="col-lg-8"><form id="contact-form" class="contact-form bg14-color py-5 py-md-10 px-4 px-md-8 border cus-border border-seven rounded-4"><div class="d-sm-flex gap-3 gap-lg-6 mb-4 mb-md-8"><div class="w-100"><label class="d2-color fs-ten mb-1">Name:</label><input type="text" class="d2-color border cus-border border-seven px-3 px-md-6 py-2 py-md-4 rounded" placeholder="Rachel Roth" id="name" required=""></div><div class="w-100 mt-3 mt-sm-0"><label class="d2-color fs-ten mb-1">Email address:</label><input type="email" class="d2-color border cus-border border-seven px-3 px-md-6 py-2 py-md-4 rounded" placeholder="Name@ examples" id="email" required=""></div></div><div class="mb-4 mb-md-8"><label class="d2-color fs-ten mb-1">Subject:</label><input type="text" class="d2-color border cus-border border-seven px-3 px-md-6 py-2 py-md-4 rounded" placeholder="Write your Subject" id="subject" required=""></div><div class="mb-5 mb-md-10"><label class="d2-color fs-ten mb-1">Message:</label><textarea class="h-135 d2-color border cus-border border-seven px-3 px-md-6 py-2 py-md-4 rounded" placeholder="Rachel Roth" id="message" required=""></textarea></div><button class="btn2 d1-color" id="contact-submit-btn"><span class="btn-text-one">Send Message</span><span class="btn-text-two">Send Message</span></button></form></div><div class="col-lg-4"><div class="bgg1-color px-5 px-lg-10 py-8 py-md-15 rounded-4"><div class="mb-5 mb-md-6 mb-xxl-11"><h4 class="fs-five w3-color mb-2">Our address info</h4><span class="w4-color fs-eleven">2 Embarcadero Center, San Francisco, CA 94111 USA</span></div><div class="mb-5 mb-md-6 mb-xxl-11"><h4 class="fs-five w3-color mb-2">Phone:</h4><span class="w4-color fs-eleven d-block mb-2">+1 (800) 555-1212</span><span class="w4-color fs-eleven d-block">+1 (800) 555-1212</span></div><div class="mb-5 mb-md-6 mb-xxl-11"><h4 class="fs-five w3-color mb-2">Email:</h4><span class="w4-color fs-eleven d-block mb-2"><a href="email-protection.html" class="__cf_email__" data-cfemail="b4c7c1c4c4dbc6c0f4d0dbd9d5ddda9ad7dbd9">[email&#160;protected]</a></span><span class="w4-color fs-eleven d-block"><a href="email-protection.html" class="__cf_email__" data-cfemail="2841464e47684d50494558444d064b4745">[email&#160;protected]</a></span></div><div class="social_info"><h4 class="fs-five w3-color mb-2 mb-md-4">Our Social info</h4><div class="d-flex flex-wrap gap-3"><a href="javascriopt:void(0)" class="contact_icon d-flex justify-content-center align-items-center"><i class="ph ph-facebook-logo fs-six w3-color"></i></a><a href="javascriopt:void(0)" class="contact_icon d-flex justify-content-center align-items-center"><i class="ph ph-x-logo fs-six w3-color"></i></a><a href="javascriopt:void(0)" class="contact_icon d-flex justify-content-center align-items-center"><i class="ph ph-linkedin-logo fs-six w3-color"></i></a><a href="javascriopt:void(0)" class="contact_icon d-flex justify-content-center align-items-center"><i class="ph ph-instagram-logo fs-six w3-color"></i></a><a href="javascriopt:void(0)" class="contact_icon d-flex justify-content-center align-items-center"><i class="ph ph-youtube-logo fs-six w3-color"></i></a></div></div></div></div></div></div><div class="position-absolute left-0 bottom-0 z-1 d-none d-xl-block"><img src="static/picture/contact-arrow.png" alt="..." class="contact-arrow"></div></section><!-- Contact section end --><!-- subscribe sectiion start --><section class="py-6 py-md-10 bg2-color overflow-hidden"><div class="container"><div class="row g-3 align-items-center justify-content-between"><div class="col-lg-6"><p class="w3-color fs-five">Subscribe to our newsletter or<span class="y1-color fs-five">follow @techxly</span> on Instagramfor latest update</p></div><div class="col-lg-5"><form id="subscribe-form"><div class="d-flex align-items-center gap-2 px-4 px-md-8 py-2 py-md-4 border rounded-pill"><input type="email" id="email" placeholder="Name@examples" class="fs-ten border-0 outline-none focus:outline-none w3-color"><button id="subscribe-btn" class="subscribe-btn flex-shrink-0 cursor-pointer"><i class="ph-fill ph-paper-plane-tilt"></i></button></div></form><p class="w3-color mt-3 mt-md-5">* We will not share your personal information with anyone</p></div></div></div></section><!-- subscribe sectiion end --><!-- Footer section start --><section class="bgd4-color footer_section"><div class="pt-120 pb-120"><div class="container"><div class="row g-6 justify-content-between"><div class="col-12 col-xl-4"><div class="mb-3 mb-lg-6"><img src="static/picture/logo.png" alt="logo"></div><p class="w3-color fs-ten">We have 14+ years experience. Helping you overcome technologychallenges. Join the thriving Techxly it solution agency.</p><div class="mt-4 mt-md-8"><div class="d-flex gap-2 gap-md-4 align-items-center mb-3 mb-md-5"><i class="ph-fill ph-map-pin fs-six w3-color"></i><span class="w3-color fs-ten">2 Embarcadero Center, San Francisco, CA 94111 USA</span></div><div class="d-flex gap-2 gap-md-4 align-items-center mb-3 mb-md-5"><i class="ph-fill ph-phone-incoming fs-six w3-color"></i><a href="tel:+1-847-555-5555" class="fs-ten">+1 (800) 555-1212</a></div><div class="d-flex gap-2 gap-md-4 align-items-center"><i class="ph-fill ph-envelope fs-six w3-color"></i><a href="email-protection.html#0e7d61636b61606b4e6b766f637e626b206d6163" class="fs-ten"><span class="__cf_email__" data-cfemail="7e0d0b0e0e110c0a3e1a11131f1710501d1113">[email&#160;protected]</span></a></div></div></div><div class="col-sm-6 col-xl-2"><h4 class="fs-five w3-color mb-3 mb-md-5">Our Social info</h4><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Web Design</span></a><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">App Development</span></a><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Cloud Services</span></a><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Domain & Hosting</span></a><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Seo Optimization</span></a><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Digital Marketing</span></a><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Cyber Security</span></a><a href="services.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Brand Identity</span></a></div><div class="col-sm-6 col-xl-2"><h4 class="fs-five w3-color mb-3 mb-md-5">Information</h4><a href="about.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">About</span></a><a href="price.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Pricing</span></a><a href="team.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Team</span></a><a href="portfolio.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Portfolio</span></a><a href="faqs.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">FAQs</span></a><a href="blog.html" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Blogs</span></a><a href="javascriopt:void(0)" class="d-flex align-items-center flex-shrink-0 gap-2 mb-2 mb-md-3"><span class="fs-ten w3-color fw-medium footer_tag">Coming Soon</span></a></div><div class="col-12 col-xl-3"><h4 class="fs-five w3-color mb-3 mb-md-5">Follow Us</h4><div class="d-flex flex-column gap-3"><a href="javascript:void(0)" class="footer-follow-item d-flex justify-content-between align-items-center px-3 py-2 d-block rounded-pill"><div class="d-flex align-items-center gap-2"><div class="footer_icon"><i class="ph ph-facebook-logo"></i></div><span class="fs-eight w3-color">Facebook</span></div><div><span class="follow-views fs-eight w3-color fw-semibold">1,44,000</span><div class="footer-link"><i class="ph ph-arrow-up-right"></i></div></div></a><a href="javascript:void(0)" class="footer-follow-item d-flex justify-content-between align-items-center px-3 py-2 d-block rounded-pill"><div class="d-flex align-items-center gap-2"><div class="footer_icon"><i class="ph ph-x-logo"></i></div><span class="fs-eight w3-color">Twitter</span></div><div><span class="follow-views fs-eight w3-color fw-semibold">1,44,000</span><div class="footer-link"><i class="ph ph-arrow-up-right"></i></div></div></a><a href="javascript:void(0)" class="footer-follow-item d-flex justify-content-between align-items-center px-3 py-2 d-block rounded-pill"><div class="d-flex align-items-center gap-2"><div class="footer_icon"><i class="ph ph-linkedin-logo"></i></div><span class="fs-eight w3-color">Linkedin</span></div><div><span class="follow-views fs-eight w3-color fw-semibold">1,44,000</span><div class="footer-link"><i class="ph ph-arrow-up-right"></i></div></div></a><a href="javascript:void(0)" class="footer-follow-item d-flex justify-content-between align-items-center px-3 py-2 d-block rounded-pill"><div class="d-flex align-items-center gap-2"><div class="footer_icon"><i class="ph ph-instagram-logo"></i></div><span class="fs-eight w3-color">Instagram</span></div><div><span class="follow-views fs-eight w3-color fw-semibold">1,44,000</span><div class="footer-link"><i class="ph ph-arrow-up-right"></i></div></div></a><a href="javascript:void(0)" class="footer-follow-item d-flex justify-content-between align-items-center px-3 py-2 d-block rounded-pill"><div class="d-flex align-items-center gap-2"><div class="footer_icon"><i class="ph ph-youtube-logo"></i></div><span class="fs-eight w3-color">Youtube</span></div><div><span class="follow-views fs-eight w3-color fw-semibold">1,44,000</span><div class="footer-link"><i class="ph ph-arrow-up-right"></i></div></div></a></div></div></div></div></div><hr class="border cus-border border-four my-0"><div class="container d-flex flex-row-reverse sm:gap-3 flex-wrap justify-content-md-between justify-content-center py-3 py-md-6"><div class="d-flex gap-4"><a href="terms.html" class="w3-color sm:fs-ten footer_tag">Terms & Conditions</a><span class="w3-color sm:fs-ten">|</span><a href="privacy.html" class="w3-color sm:fs-ten footer_tag">Privacy Policy</a></div><span class="w3-color sm:fs-ten text-center">Copyright &copy; 2024.Company name All rights reserved.<a target="_blank" href="https://sc.chinaz.com/moban/">&#x7F51;&#x9875;&#x6A21;&#x677F;</a> |</span></div></section><!-- Footer section end --><!-- tilt js --><script data-cfasync="false" src="static/js/email-decode.min.js"></script><script src="static/js/vanilla-tilt.min.js"></script><script src="static/js/plugins.js"></script><script src="static/js/main.js"></script><script src="static/js/swiper-bundle.min.js"></script><script src="static/js/aos.js"></script><script src="static/js/custom-plugin.js"></script><!-- glightbox  --><script src="static/js/glightbox.min.js"></script><script>var lightboxVideo = GLightbox({selector: ".glightbox3",});</script><script type="text/javascript" src="static/js/email.min.js"></script></body>
</html>

404.html

<html>
<head><meta charset="UTF-8">
</head>
<body><h1>404查找的页面不存在</h1>
</body>
</html>

演示

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

详细描述一下Elasticsearch搜索的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch搜索的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch搜索的过程&#xff1f; Elasticsearch 的搜索过程是其核心功能之一&#xff0c;允许用户对存储在 Elasticsea…

springBoot插件打包部署

打包插件spring-boot-maven-plugin 不使用插件&#xff0c;运行时&#xff0c;异常信息为“没有主清单属性” 本地部署 杀进程

[ 网络安全介绍 1 ] 什么是网络安全?

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

无插件H5播放器EasyPlayer.js视频流媒体播放器如何开启electron硬解码Hevc(H265)

在数字化时代&#xff0c;流媒体播放器技术正经历着前所未有的变革。随着人工智能、大数据、云计算等技术的融合&#xff0c;流媒体播放器的核心技术不断演进&#xff0c;为用户提供了更加丰富和个性化的观看体验。 EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、…

阿里数字人工作 Emote Portrait Alive (EMO):基于 Diffusion 直接生成视频的数字人方案

TL;DR 2024 年 ECCV 阿里智能计算研究所的数字人工作&#xff0c;基于 diffusion 方法来直接的从音频到视频合成数字人&#xff0c;避免了中间的三维模型或面部 landmark 的需求&#xff0c;效果很好。 Paper name EMO: Emote Portrait Alive - Generating Expressive Portra…

Unity脚本基础规则

Unity脚本基础规则 如何在Unity中创建一个脚本文件&#xff1f; 在Project窗口中的Assets目录下&#xff0c;选择合适的文件夹&#xff0c;右键&#xff0c;选择第一个Create&#xff0c;在新出现的一栏中选择C# Script&#xff0c;此时文件夹内会出现C#脚本图标&#xff0c;…

基于YOLOv8深度学习的无人机航拍小目标检测系统(PyQt5界面+数据集+训练代码)

本研究提出并实现了一种基于YOLOv8深度学习模型的无人机航拍小目标检测系统&#xff0c;旨在解决高空环境下汽车目标检测的技术难题。随着无人机技术的发展&#xff0c;航拍图像已广泛应用于交通监控、城市管理、灾害应急等多个领域。然而&#xff0c;由于无人机通常在较高的飞…

Excel如何把两列数据合并成一列,4种方法

Excel如何把两列数据合并成一列,4种方法 参考链接:https://baijiahao.baidu.com/s?id=1786337572531105925&wfr=spider&for=pc 在Excel中,有时候需要把两列或者多列数据合并到一列中,下面介绍4种常见方法,并且提示一些使用注意事项,总有一种方法符合你的要求:…

VSCode自定义插件创建教程

文章目录 一、前言二、插件维护三、调试插件四、使用 vsce 生成 vsix 插件五、问题&#xff1a;打开调试窗口后&#xff0c;输入helloworld并没有指令提示六、插件创建实战七、拓展阅读 一、前言 对于前端程序猿来讲&#xff0c;最常用的开发利器中VSCode首当其冲&#xff0c;…

HarmonyOS Next 关于页面渲染的性能优化方案

HarmonyOS Next 关于页面渲染的性能优化方案 HarmonyOS Next 应用开发中&#xff0c;用户的使用体验至关重要。其中用户启动APP到呈现页面主要包含三个步骤&#xff1a; 框架初始化页面加载布局渲染 从页面加载到布局渲染中&#xff0c;主要包含了6个环节&#xff1a; 执行页…

深度学习之目标检测的技巧汇总

1 Data Augmentation 介绍一篇发表在Big Data上的数据增强相关的文献综述。 Introduction 数据增强与过拟合 验证是否过拟合的方法&#xff1a;画出loss曲线&#xff0c;如果训练集loss持续减小但是验证集loss增大&#xff0c;就说明是过拟合了。 数据增强目的 通过数据增强…

记录下,用油猴Tampermonkey监听所有请求,绕过seesion

油猴Tampermonkey监听所有请求&#xff0c;绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口&#xff0c;这个接口的页面入口被隐藏掉了&#xff0c;不能通过页面调用&#xff0c;幸好之前有想过逆向破解通过账号密码模拟登录后拿到token&#xff0c;请求该…

百度遭初创企业指控抄袭,维权还是碰瓷?

“ 抄袭指控引发网友热议&#xff0c;有人支持其立场&#xff0c;也有人认为工具类产品在界面设计上相似度高是行业常态。 ” 转载|科技新知 原创 作者丨晓伊 编辑丨蕨影 一年一度的百度世界大会刚刚落幕&#xff0c;一家初创企业却站出来公开指责百度抄袭自家产品&#xff…

golang通用后台管理系统09(系统操作日志记录)

1.日志工具类 package log/**** 日志记录 wangwei 2024-11-18 15:30*/ import ("log""os""path/filepath""time" )// 获取以当前日期命名的日志文件路径 func getLogFilePath() string {currentDate : time.Now().Format("2006-…

迁移学习理论与应用

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习技术&#xff0c;旨在将一个任务&#xff08;源任务&#xff09;上学到的知识迁移到另一个相关但不完全相同的任务&#xff08;目标任务&#xff09;上&#xff0c;从而提高目标任务的学习效果。这种方法的核心…

Azure Kubernetes Service (AKS)资源优化策略

针对Azure Kubernetes Service (AKS)的资源优化策略&#xff0c;可以从多个维度进行考虑和实施&#xff0c;以提升集群的性能、效率和资源利用率。以下是一些关键的优化策略&#xff1a; 一、 Pod资源请求和限制 设置Pod请求和限制&#xff1a;在YAML清单中为所有Pod设置CPU和…

Vue3 虚拟列表组件库 virtual-list-vue3 的使用

Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库&#xff0c;欢迎各位来进行使用与给予一些更好的建议&#x1f60a; 概述&#xff1a;该组件组件库用于提供虚拟化列表能力的组件&#xff0c;用于解决展示大量数据渲染时首屏渲…

qt之QFTP对文件夹(含嵌套文件夹和文件)、文件删除下载功能

一、前言 主要功能如下&#xff1a; 1.实现文件夹的下载和删除&#xff0c;网上很多资料都是单独对某个路径的文件操作的&#xff0c;并不能对文件夹操作 2.实现目标机中含中文名称自动转码&#xff0c;有些系统编码方式不同&#xff0c;下载出来的文件会乱码 3.实现ftp功能…

SpringBoot登录功能实现思路(验证码+拦截器+jwt)

总括 用户输入用户名和密码和验证码即可进行登录 验证码 VerifyCode&#xff1a;生成验证码的工具类 /*** 生成验证码的工具类*/ public class VerifyCode {private int w 70;//设置缓冲区的宽private int h 35;//设置缓冲区的宽private Random r new Random();//从字体…

小米路由器用外网域名访问管理界面

本文在Redmi AX3000 (RA81)设置&#xff0c;其他型号路由器的管理界面端口可能各不相同。 开始之前需要保证路由器SSH功能正常&#xff0c;如果没有SSH可以参考这里。 1. 给WAN口开放80端口 可以通过下载mixbox的firewall插件或者其他防火墙插件开放端口。 2. 把域名解析到路…