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

RHCE【web服务器】

目录

一、web服务器简介

1、什么是www

2、网址及HTTP简介

3、http协议请求的工作过程:

二、web服务器的类型

1、仅提供用户浏览的单向静态网页

2、提供用户互动接口的动态网站

三、web服务器基本配置

四、虚拟主机配置实战

1、搭建静态网站--基于http协议的静态网站

实验1:搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。

实验2:建立两个基于ip地址访问的网站,要求如下:

实验3:建立两个基于不同端口访问的网站,要求如下:

实验4:建立两个基于域名访问的网站,要求如下:

实验5:基于虚拟目录和用户控制的web网站


一、web服务器简介

1、什么是www

www world wide web 的缩写,也就是全球信息广播的意思。通常说的上网就是使用 www 来查询用户 所需要的信息。www 可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方 式将信息以Internet 传递到世界各处去。
与其他服务器类似,当你连接上 www 网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可 以解析这些数据的软件来处理,那就是浏览器。
www 服务器与客户端浏览器之间的连接图:
(1)   www 所用的协议: 浏览器怎样向 web 服务器请求数据以及服务器怎样把文档传送给浏览器呢?这就是由http 协议来定义的,( Hyper Text Transport Protocol HTTP ,超文本传输协议)。
(2) www 服务器需要提供可让客户端浏览的平台。目前最主流的 Web 服务器是 Apache Microsoft 的Internet信息服务器( Internet Information Services IIS )和 unix nginx
(3) 服务器所提供的最主要数据是超文本标记语言( Hyper Text Markup Language HTML )、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML 只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式。
(4) 客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那么著名的浏览器就有内建在Windows 操作系统内的 IE 浏览器了,还有 Firefox 浏览器和 Google 的chrome浏览器。

2、网址及HTTP简介

web 服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在nginx 中,这个目录默认 在/usr/share/nginx/html/ 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据
的。
(1)URL Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
(2)网址格式: < 协议 >://< 主机或主机名 >[:port]/< 目录资源 , 路径 >
               [1] 浏览器常支持的协议有:http、 https ftp 等。
               [2]主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。
               [3]端口号(port): http 80 https 443 IANA :互联网数字分配机构)
                        
0-1023 :众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限
启用并让进程监听)
1024-41951 :亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:
3306/TCP
41952-60000 :客户端程序随机使用的端口,动态端口,或私有端口
(3)http 请求方法:在 http 通信中,每个 http 请求报文都包含一个方法,用以告诉 web 服务器端需要执行哪些具体的动作,这些动作包括:获取指定web 页面、提交内容到服务器、删除服务器上资源文件等。

 (4)状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

  1xx :指示信息 —— 表示请求已接收,继续处理
  2xx :成功 —— 表示请求已被成功接收、理解、接受
  3xx :重定向 —— 要完成请求必须进行更进一步的操作
  4xx :客户端错误 —— 请求有语法错误或请求无法实现
  5xx :服务器端错误 —— 服务器未能实现合法的请求
常见状态代码、状态描述的说明如下:
  200 OK :客户端请求成功
  400 Bad Request :客户端请求有语法错误,不能被服务器所理解
  401 Unauthorized :请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
  403 Forbidden :服务器收到请求,但是拒绝提供服务
  404 Not Found :请求资源不存在,举个例子:输入了错误的 URL
  500 Internal Server Error :服务器发生不可预期的错误
  503 Server Unavailable :服务器当前不能处理客户端的请求,一段时间后可能恢复正常
(5) HTTP 报文: http 报文中有很多行内容,这些行的字段内容都是由一些 ASCII 码串组成,但各个字段 的长度是不同的。 http 报文可分为两种,一种是从 web 客户端发往 web 服务器的 http 报文,称为请 求报文。另外一种是从 web 服务器发往 web 客户端的报文,称为响应报文 。
[1]http 请求报文由请求行、请求头部、空行和请求报文主体几个部分组成:
  1. 请求行:包括请求方法(如GET、POST)、请求URI和HTTP版本号。例如,GET /index.html HTTP/1.1
  2. 请求头部:包含若干个属性,格式为“属性名: 属性值”,提供客户端环境信息、请求体的大小、客户端支持的压缩类型等。常见的请求头包括Host、User-Agent、Accept、Accept-Encoding、Content-Length等。
  3. 空行:请求头和请求体之间的分隔符,表示请求头的结束。
  4. 请求体:在某些类型的HTTP
[2]http 响应报文由起始行、响应头部、空行和响应报文主体这几个部分组成:
  1. 起始行:包含协议版本、状态码和原因短语。例如,HTTP/1.1 200 OK
  2. 响应头部:包含服务器的基本信息以及数据的描述信息,使用key-value形式。例如,Content-Type: text/html表示返回的内容类型为HTML。
  3. 空行:用于分隔响应头和响应体,表示响应头的结束。
  4. 响应体:实际传输的数据,可以是文本、图片、视频等二进制数据

3、http协议请求的工作过程:

  1. 地址解析:客户端需要通过域名系统(DNS)将URL中的域名解析为对应的IP地址。例如,访问http://www.baidu.com时,DNS服务器会将该域名解析为对应的IP地址。

  2. 建立TCP连接:客户端与服务器之间需要建立TCP连接。这通常涉及“三次握手”过程,确保双方能够进行可靠的数据传输。

  3. 发送HTTP请求:客户端通过已建立的TCP连接向服务器发送HTTP请求报文。请求报文包括请求方法(如GET、POST)、请求的URL、协议版本以及可选的头部字段和主体内容。

  4. 服务器处理请求:服务器接收到请求后,会根据请求的内容进行处理。这可能包括查找资源、执行程序或生成响应数据等。

  5. 返回HTTP响应:服务器处理完请求后,会向客户端返回HTTP响应报文。响应报文包括状态行(包含协议版本、状态码和原因短语)、响应头部字段以及可选的响应体内容。

  6. 浏览器解析响应:客户端(通常是Web浏览器)接收到服务器的响应后,会根据响应状态码和响应内容进行解析和展示。如果状态码表示成功(如200 OK),则展示响应体中的内容;否则,显示错误信息。

  7. 关闭连接:在默认情况下,HTTP是无状态且短连接的,即每个请求完成后都会关闭TCP连接。不过,为了提高效率,也可以使用Keep-Alive头来保持连接,以便后续请求复用同一连接。

二、web服务器的类型

1、仅提供用户浏览的单向静态网页

单纯是由服务器单向提供数据给客户端, Server 不需要与 client 端有互动,所以你可以到该网站上去浏览,但是无法进行数据的上传。

2、提供用户互动接口的动态网站

这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过 网页程序语言” 来实现与用户互动的行为。常见的例如: PHP 网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。
另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码( JavaScript )传送给客户 端,客户端的浏览器如果提供 JavaScript 的功能,那么该程序就可以在客户端的计算机上面工作了;另外一种可在客户端执行的就是flash 动画格式,在这种动画格式内还可以进行程序设计。

搭建动态网站的需求通常包括以下几个方面:

  1. 服务器环境:需要一台或多台服务器来托管网站,服务器上需要安装操作系统(如Linux、Windows Server等)和Web服务器软件(如Apache、Nginx、IIS等)。
  2. 数据库支持:动态网站通常需要与数据库进行交互,因此需要安装数据库管理系统(如MySQL、PostgreSQL、Oracle、SQL Server等),并配置好数据库。
  3. 编程语言支持:需要选择一种或多种编程语言来编写网站的后端逻辑,常见的有PHP、Python、Java、Ruby、Node.js等。
  4. 框架和库:为了提高开发效率和代码质量,通常会使用一些Web开发框架和库,如Django(Python)、Spring(Java)、Laravel(PHP)、Express(Node.js)等。
  5. 前端技术:虽然动态网站主要依赖于后端技术,但也需要一些前端技术来构建用户界面,如HTML、CSS、JavaScript以及前端框架(如React、Vue.js、Angular等)。
  6. 安全性需求:需要考虑网站的安全性,包括数据加密、身份验证、权限控制、防止SQL注入、跨站脚本攻击(XSS)等。
  7. 性能优化:需要对网站进行性能优化,以提高响应速度和并发处理能力,如使用缓存、负载均衡、CDN等技术。
  8. 版本控制:为了管理代码和协作开发,需要使用版本控制系统(如Git、SVN等)来管理代码库。
  9. 部署和发布:需要一套自动化的部署和发布流程,以便快速将新功能或修复部署到生产环境中。
  10. 监控和维护:需要对网站进行实时监控,及时发现和解决问题,并进行定期维护和更新。

三、web服务器基本配置

服务器端:此处使用 nginx 提供 web 服务, RPM 包获取: http://nginx.org/packages/
#安装nginx软件包:
[root@server ~]# yum install nginx -y

#显示nginx的版本信息:
[root@server ~]# nginx -v

#显示Nginx的详细配置信息,包括编译时使用的所有参数和模块:
[root@server ~]# nginx -V

#显示nginx的用法和选项:
[root@server ~]# nginx -help
用法:nginx [-?hvVtTq] [-s信号][-p前缀]
[-e文件名][-c文件名][-g指令]

选项:
- - - - - - ?,-h:这有帮助
-v:显示版本并退出
-V:显示版本并配置选项,然后退出
-t:测试配置并退出
-T:测试配置,转储并退出
-q:在配置测试时抑制非错误信息
-s signal:向主进程发送信号:停止,退出,重新打开,重新加载
-p prefix:设置前缀路径(默认:/usr/share/nginx/)
-e文件名:设置错误日志文件(默认:/var/log/nginx/error.log)
-c filename:设置配置文件(默认:/etc/nginx/nginx.conf)
-g directives:将全局指令从配置文件中设置出来


#列出nginx中的所有文件:
[root@server ~]# rpm -ql nginx

#以树状图显示nginx配置文件目录:
[root@server ~]# tree /etc/nginx/
/etc/nginx/
├── conf.d            #子配置文件目录
├── default.d            
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params            #用以翻译nginx的变量供php识别
├── fastcgi_params.default
├── koi-utf
├── koi-win
├── mime.types               #用以配置支持的媒体文件类型
├── mime.types.default
├── nginx.conf            #主配置文件
├── nginx.conf.default
├── scgi_params
├── scgi_params.default
├── uwsgi_params        #用以配置nginx的变量供python识别
├── uwsgi_params.default
└── win-utf

#以树状图显示nginx默认的网站根目录(通常包含静态网页文件)
[root@server ~]# tree /usr/share/nginx/html/

#以树状图显示nginx日志目录(通常包含访问日志和错误日志)
[root@server ~]# tree /var/log/nginx

#搜索匹配nginx的主配置文件中不以#开头的行(即非注释行)
[root@server ~]# grep ^[^#]  /etc/nginx/nginx.conf
#关闭防火墙并且立即生效:
[root@server ~]# systemctl disable firewalld --now

#将SELinux设置为宽容模式,并检查SELinux的状态:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

#重启nginx进程:
[root@server ~]# systemctl restart nginx

curl:这是一个命令行进行数据传输的工具,支持多种协议包括http、https、ftp等等
#获取HTTP响应的头部信息:
[root@server ~]# curl -I localhost
HTTP/1.1 200 OK                    #表示使用的HTTP协议版本
Server: nginx/1.20.1               #服务器软件的名称和版本。这里显示的是Nginx 1.20.1
Date: Thu, 24 Oct 2024 08:34:17 GMT 
Content-Type: text/html            #返回内容的MIME类型。这里表示返回的内容是HTML文档
Content-Length: 2713881            #返回内容的长度(以字节为单位)。这里表示返回的HTML文档大小为2,713,881字节。
Last-Modified: Tue, 04 Jun 2024 22:57:12 GMT
Connection: keep-alive             #连接管理方式。这里表示保持连接打开
ETag: "665f9bc8-296919"            #实体标签,用于缓存验证。ETag是一个唯一标识符,用于判断资源是否被修改
Accept-Ranges: bytes                #指示服务器是否接受范围请求。这里表示服务器接受按字节范围请求,允许客户端请求部分内容

四、虚拟主机配置实战

1、搭建静态网站--基于http协议的静态网站

实验1:搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。


#输出字符串"hello world"到标准输出,重定向操作符,将标准输出的内容写入到Nginx服务器的默认网页文件index.html中:
[root@server ~]# echo "hello world" > /usr/share/nginx/html/index.html

#使用curl工具向本地主机(即运行在当前机器上的Web服务器)发送HTTP请求:
[root@server ~]# curl localhost
hello world

#使用curl工具向IP地址为192.168.88.5的服务器发送HTTP请求:
[root@server ~]# curl 192.168.88.5
hello world

 实验成功!!!

实验2:建立两个基于ip地址访问的网站,要求如下:

该网站 ip 地址的主机位为 100 ,设置首页目录为 /www/ip/100 ,网页内容为: this is 100
该网站 ip 地址主机位为 200 ,设置首页目录为 /www/ip/200 ,网页内容为: this is 200

 

nmtui:这是NetworkManager的命令行文本用户界面(TUI)。它提供了一个基于文本的界面来管理网络连接。运行这个命令会启动一个交互式的菜单,允许您配置和管理网络连接。

nmcli:这是NetworkManager的命令行接口工具。它允许您通过命令行与NetworkManager进行交互。

#进入图形界面更改网络连接:
[root@server ~]# nmtui

#激活名为ens160的网络连接:
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

#显示所有网络接口的信息,包括IP地址、MAC地址等:
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:37:d2:d7 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.88.100/24 brd 192.168.88.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.88.200/24 brd 192.168.88.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe37:d2d7/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

 

#递归创建目录,并且显示每一个被创建的目录:
[root@server ~]# mkdir -pv /www/ip/{1,2}00
mkdir: created directory '/www'
mkdir: created directory '/www/ip'
mkdir: created directory '/www/ip/100'
mkdir: created directory '/www/ip/200'

#将内容写入到指定文件中:
[root@server ~]# echo this is 100 > /www/ip/100/index.html
[root@server ~]# echo this is 200 > /www/ip/200/index.html

#更改SELinux设置:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

#编辑nginx配置文件下的ip测试文件:
[root@server ~]# vim /etc/nginx/conf.d/test_ip.conf

server {

        listen 192.168.88.100:80;
        root /www/ip/100;
        location / {
        }
}
server {

        listen 192.168.88.200:80;
        root /www/ip/200;
        location / {
        }
}

#重启nginx服务:
[root@server ~]# systemctl restart nginx

#使用curl向配置文件中写入的IP地址发送HTTP请求:
[root@server ~]# curl 192.168.88.100
this is 100
[root@server ~]# curl 192.168.88.200
this is 200

 

实验成功!!!

实验3:建立两个基于不同端口访问的网站,要求如下:

建立一个使用 web 服务器默认端口的网站,设置网站首页目录为 /www/port/80 ,网页内容为: the
port is 80
建立一个使用 10000 端口的网站,设置网站首页目录为 /www/port/10000 ,网页内容为: the port
is 10000

#递归创建目录,并且显示每一个被创建的目录:
[root@server ~]# mkdir -pv /www/port/{80,10000}
mkdir: created directory '/www/port'
mkdir: created directory '/www/port/80'
mkdir: created directory '/www/port/10000'

#创建对应的网页文件并写入内容:
[root@server ~]# echo this port is 80 > /www/port/80/index.html
[root@server ~]# echo this port is 10000 > /www/port/10000/index.html

#进入图形界面更改网络连接,并且激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

#编辑nginx的配置文件:
[root@server ~]# vim /etc/nginx/conf.d/test_port.conf
server {
        listen 192.168.88.120:80;
        root /www/port/80;
        location / {
        }
}
server {
        listen 192.168.88.120:10000;
        root /www/port/10000;
        location / {
        }
}

#重启nginx服务:
[root@server ~]# systemctl restart nginx

#向指定端口的IP地址进行HTTP的请求测试:
[root@server ~]# curl 192.168.88.120
this port is 80
[root@server ~]# curl 192.168.88.120:80
this port is 80
[root@server ~]# curl 192.168.88.120:10000
this port is 10000

实验成功!!!

实验4:建立两个基于域名访问的网站,要求如下:

新建一个网站,域名为 www.ceshi.com ,设置网站首页目录为 /www/name ,网页内容为 this is
test
新建一个网站,域名为 rhce.first.day ,同时可通过 ce.first.day 访问,设置网站首页目录
/www/ce, 网页内容为: today is first day of class
基于域名的网站,需要用到域名解析。 域名 ------->ip 地址
浏览器如何通过域名去查询 URL 对应的 IP (对应服务器地址):
1 、浏览器缓存:浏览器会按照一定的频率缓存 DNS 记录。
2 、操作系统缓存:如果浏览器缓存中找不到需要的 DNS 记录,那就去操作系统中的 hosts 文件
找。 hosts 是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的 IP 地址建
立一个关联 " 数据库 " ,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从 Hosts
件中寻找对应的 IP 地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址
提交 DNS 域名解析服务器进行 IP 地址的解析。
windows 下的 hosts 文件路径: C:\Windows\System32\drivers\etc\hosts
Linux 下的 hosts 文件路径 :/etc/hosts
3 、路由缓存:路由器也有 DNS 缓存。
4 ISP DNS 服务器: ISP 是互联网服务提供商 (Internet Service Provider) 的简称, ISP 有专门的
DNS 服务器应对 DNS 查询请求。
5 、根服务器: ISP DNS 服务器还找不到的话,它就会向根服务器发出请求,进行递归查询
DNS 服务器先问根域名服务器 .com 域名服务器的 IP 地址,然后再问 .com 域名服务器,依次类
推)

 

#进入图形界面更改网络连接,并且激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

#以递归的方式创建文件,并且显示被创建的文件:
[root@server ~]# mkdir -pv /www/{name,ce}
mkdir: created directory '/www/name'
mkdir: created directory '/www/ce'

#向指定文件写入内容:
[root@server ~]# echo this is a test > /www/name/index.html
[root@server ~]# echo today is first day of class > /www/ce/index.html

#编辑nginx网页配置文件:
[root@server ~]# vim /etc/nginx/conf.d/test_servername.conf

server {
        listen 192.168.88.130:80;
        server_name www.ceshi.com;
        root /www/name;
        location / {
        }
}
server {
        listen 192.168.88.130:80;
        server_name rhce.first.day ce.first.day;
        root /www/ce;
        location / {
        }
}


[root@server ~]# vim /etc/hosts
192.168.88.130  www.ceshi.com rhce.first.day ce.first.day

#更改SELinux状态,并且检查其状态:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

使用curl进行测试:
[root@server ~]# curl www.ceshi.com
this is a test
[root@server ~]# curl rhce.first.day
today is first day of class
[root@server ~]# curl ce.first.day
today is first day of class

测试成功!!!

实验5:基于虚拟目录和用户控制的web网站

 

#进入图形界面更改网络连接,并且激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

[root@server ~]# mkdir /www/real/
[root@server ~]# echo real_virtual > /www/real/index.html
[root@server ~]# systemctl restart nginx
[root@server ~]# vim /etc/nginx/conf.d/test_virtualdir.conf
server {
        listen 192.168.88.140:80;
        root /usr/share/nginx/html;
        location /real {
                alias /www/real;
                auth_basic on;
                auth_basic_user_file /etc/nginx/conf.d/auth-password;
        }
}

#使用yum安装httpd-tools包
[root@server ~]# yum install httpd-tools -y

htpasswd:生成或更新HTTP基本认证密码文件的工具

#添加一个新用户,并且创建一个密码文件从命令行中读取密码:
[root@server ~]# htpasswd -cb /etc/nginx/conf.d/auth-password user1 123
Adding password for user user1
[root@server ~]# systemctl restart nginx
[root@server ~]# curl 192.168.88.140
hello world
[root@server ~]# curl 192.168.88.140/real/
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@server ~]# curl 192.168.88.140/real/ -u user1
Enter host password for user 'user1':
real_virtual


http://www.kler.cn/news/364329.html

相关文章:

  • 自学C语言——函数(全)
  • uniapp微信小程序使用vant组件库
  • 什么是虚拟线程?Java 中虚拟线程的介绍与案例演示
  • 【python】sorted() list.sort()
  • 光储充微电网:策略调度带领能源新未来---安科瑞 吴雅芳
  • List、Set、数据结构、Collections
  • pytorh学习笔记——cifar10(七)inception网络
  • 【ANTs】医疗影像工具ANTs多种安装方式教程
  • LLM - 视觉分割开源算法 SAM2(Segment Anything Model 2) 配置与推理 (1)
  • Windows无法打开组策略 | Windows家庭版如何添加和打开组策略
  • JavaWeb开发全攻略:从零到精通,掌握核心技术与最佳实践,打造高性能Web应用!
  • 9月模拟手游下载量迎来激增,两款新游跻身全球下载榜前十!
  • 【有啥问啥】智能座舱中的ADDW认证是什么?
  • [蓝桥杯 2024 省 C] 回文数组
  • Go语言开发环境搭建
  • 《a16z : 2024 年加密货币现状报告》解析
  • 云计算与SaaS赋能的工业软件服务新形态
  • 第五十一章 安全元素的详细信息 - EncryptedKey 详情
  • 2-解决联想拯救者Y7000p在ubuntu20.04未找到wifi适配器,安装rtl8852ce网卡驱动问题
  • django报错问题Error 0x800B0109(CERT_E_UNTRUSTEDROOT)(已解决)
  • 政府办公人员常见的办公软件技能
  • Python作业
  • JavaScript 中四种常见的数据类型判断方法
  • SSCI/SCI/EI/Scopus/期刊合集,周期短,快速发表,见刊快!
  • 微服务之网关、网关路由、网关登录校验
  • MySQL数据库—多表查询