Apache网页优化

本章主要介绍如何对Apache网页进行优化

  • Apache 网页压缩
  • Apache 网页缓存
  • Apache 隐藏版本信息
  • Apache 网页防盗链

目录

1、网页压缩与缓存 

1.1、网页压缩

(1)gzip介绍

(2)HTTP压缩的过程 

(3)Apache的压缩模块

(4)mod_deflate模块

1.2、网页缓存 

(1)配置mod_expires模块启用

2、隐藏版本信息 

2.1、配置Apache隐藏版本信息 

3、Apache防盗链 

 3.1、配置防盗链

3.2、检查是否安装mod_rewrite模块 

3.3、网页准备


1、网页压缩与缓存 

在使用Apache作为Web服务器的过程中,只有对Apache服务器进行适当的优化配置,才能让Apache发挥出更好的性能。反过来说,如果Apache的配置非常糟糕,Apache可能无法正常为我们服务。因此,针对各种企业应用需求对Apache服务器的配置进行一定的优化是必不可少的。

1.1、网页压缩

网站的访问速度是由多个因素所共同决定的,这些因素包括应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是Apache本身的响应速度。因此当为网站性能所苦恼时,第一个需要着手进行处理的便是尽可能的提升Apache的执行速度,可以使用网页压缩提升应用程序的速度。更重要的是,它完全不需要任何的成本,只不过是会让服务器CPU占用率稍微提升一两个百分点或者更少。

(1)gzip介绍

 gzip是一种流行的文件压缩算法,目前应用非常广泛,尤其是在Linux平台。当使用gzip压缩一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。利用Apache中的gzip模块,可以使用gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。经过压缩后,实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。

网页加载速度加快的好处不言而喻。除了节省流量,改善用户的浏览体验外,另一个潜在的好处是gzip与搜索引擎的抓取工具有着更好的关系。

(2)HTTP压缩的过程 

Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩(Accept-Encoding 信息)。如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名。如果请求文件是HTML、CSS等静态文件,Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件。如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件。如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件。如果请求文件是动态文件,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

(3)Apache的压缩模块

Apache 1.x系列没有内建网页压缩技术,使用的是额外的第三方mod_gzip模块来执行压缩。而 Apache 2.x官方在开发的时候,就把网页压缩考虑进去,内建了mod_deflate这个模块,用以取代 mod_gzip。两者都是使用的gzip压缩算法,它们的运作原理是类似的。

mod_deflate压缩速度略快而mod_gzip的压缩比略高。一般默认情况下,mod_gzip会比 mod_deflate多出4%~6%的压缩量。

一般来说,mod_gzip对服务器CPU的占用要高一些。mod_deflate是专门为确保服务器的性能而使用的一个压缩模块,mod_deflate需要较少的资源来压缩文件。这意味着在高流量的服务器,使用 mod_deflate可能会比mod_gzip加载速度更快。

简而言之,如果网站访问量较小,想要加快网页的加载速度,就使用mod_gzip。虽然会额外耗费一些服务器资源,但也是值得的。如果网站访问量较大,并且使用的是共享的虚拟主机,所分配系统资源有限的话,使用mod_deflate将会是更好的选择。

Apache 2.4.25版本中mod_deflate模块,可使用DeflateCompressionLevel指令设置压缩级别。该指令的值可为1(压缩速度最快,最低的压缩质量)至9 (最慢的压缩速度,压缩率最高)之间的整数,其默认值为6 (压缩速度和压缩质量较为平衡的值)。这个简单的变化更是使得 mod_deflate可以轻松媲美mod_gzip的压缩。

(4)mod_deflate模块

  • 检查是否安装 mod_deflate 模块。 
[root@www ~]# apachectl -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 mpm_worker_module (static)
 authn_file_module (shared)
 authn_core_module (shared)
 authz_host_module (shared)
 authz_groupfile_module (shared)
 authz_user_module (shared)
 authz_core_module (shared)
 access_compat_module (shared)
 auth_basic_module (shared)
 reqtimeout_module (shared)
 filter_module (shared)
 mime_module (shared)
 log_config_module (shared)
 env_module (shared)
 headers_module (shared)
 setenvif_module (shared)
 version_module (shared)
 unixd_module (shared)
 status_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 alias_module (shared)
 php5_module (shared)
[root@www ~]# apachectl -t -D DUMP_MODULES | grep "deflate"
[root@www ~]#
  • 重新编译Apache添加mod_deflate模块 
[root@www ~]# cd /usr/src/httpd-2.4.25/
[root@www httpd-2.4.25]# yum -y install zlib-devel
[root@www httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate
[root@www httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@www conf]# mv httpd.conf httpd.conf.bak
[root@www conf]# systemctl stop httpd.service 
[root@www conf]# cd /usr/src/httpd-2.4.25/
[root@www httpd-2.4.25]# make -j2 && make install
  • 配置mod_deflate模块启用 
[root@www httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@www conf]# ls
extra  httpd.conf  httpd.conf.bak  magic  mime.types  original
[root@www conf]# vim httpd.conf
Listen 192.168.23.201:80  //52行修改端口号
LoadModule deflate_module modules/mod_deflate.so  //106行取消注释
ServerName www.kgc.com:80  //201行修改域名信息
//配置文件最后添加以下内容
<IfModule mod_deflate.c>  //开启gzip功能
     AddOutputFilterByType DEFLATE text/hml text/plain text/css text/xml text/javascrpit text/jpg text/png  //设置对什么样的内容进行gzip压缩
     DeflateCompressionLevel 9  //设置压缩级别1-9之间
     SetOutputFilter DEFLATE  //启用deflate模块对本站点的输出进行gzip压缩
</IfModule>
  • 检查安装情况,启动服务 
[root@www conf]# apachectl -t  //检查配置文件是否正确
Syntax OK
[root@www conf]# apachectl -t -D DUMP_MODULES | grep "deflate"  //检查mod_daflate模块是否安装
 deflate_module (shared)
[root@www conf]# systemctl start httpd.service  //重启服务
  • 测试缓存是否生效 
[root@www ~]# cd /usr/local/httpd/htdocs/
[root@www htdocs]# mv /opt/381960.jpg /usr/local/httpd/htdocs/
[root@www htdocs]# vim index.html
<html>
 <body>
    <h1>It works!</h1>
    <img src="381960.jpg"/>
 </body>
</html>

[root@www htdocs]# systemctl restart httpd.service
  • 浏览器访问,使用F12消息查看 

  在浏览器中选择“查看元素”可以看到有“AcceptEncoding:gzip”表示压缩已经生效 

ae79e2aed04b429faf3deb10a44d9877.png 

1.2、网页缓存 

网页缓存是将一部分经常不会改变和变动很少的页面缓存, 下次浏览器再次访问这些页面时, 不需要再次去下载这些页面 , 从而提高了用户的访问速度。

 Apache的mod_expires模块会自动生成页面头部信息中的Expires标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
配置mod_expires模块的步骤与mod_deflate模块相似。

(1)配置mod_expires模块启用

启用mod_expires模块之前,可以用浏览器先抓取数据包,然后修改httpd.conf文件再抓取数据包进行对比。在httpd.conf去掉LoadModule expires_module modules/mod_expires.so前面的#注释,末尾加入以下内容。

  • 检查是否安装mod_expires模块
[root@www ~]# apachectl -t -D DUMP_MODULES | grep "expires"
[root@www ~]# 

如果没有安装mod_expires模块,重新编译安装Apache添加mod_expires模块 

  • 重新编译安装Apache添加mod_expires模块 
[root@www ~]# systemctl stop httpd.service 
[root@www ~]# cd /usr/local/httpd/conf/
[root@www conf]# ls
extra  httpd.conf  httpd.conf.bak  magic  mime.types  original
[root@www conf]# mv httpd.conf httpd.conf.bak1
[root@www conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@www conf]# cd /usr/src/httpd-2.4.25/
[root@www httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires
[root@www httpd-2.4.25]# make -j2 && make install
  • 配置mod_expires模块启用 
[root@www httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@www conf]# ls
extra  httpd.conf  httpd.conf.bak  httpd.conf.bak1  magic  mime.types  original
[root@www conf]# vim httpd.conf
Listen 192.168.23.201:80  //52行修改端口号
LoadModule expires_module modules/mod_expires.so  //113行取消注释
ServerName www.kgc.com:80  //201行取消注释并修改域名信息
//配置文件最后添加以下内容
<IfModule mod_expires.c>
  ExpiresActive On  //打开网页缓存功能
  ExpiresDefault "access plus 60 seconds"  //设置缓存60秒
</IfModule>
  • 检查安装情况,启动服务 
[root@www conf]# apachectl -t  //验证配置文件是否正确
Syntax OK 
[root@www conf]# apachectl -t -D DUMP_MODULES | grep "expires"  //检查mod_expires模块是否安装
 expires_module (shared)
[root@www conf]# systemctl restart httpd.service   //重启httpd服务
  • 测试缓存是否生效 

在Windows10之前的系统中需要依次安装Microsoft.NET4和fiddler 软件,打开fiddler软件选择 inspectors --->选择Headers浏览器访问http://192.168.23.201,双击200消息查看Expires项。 

232a745c0b6747399406eda48836f654.png 


2、隐藏版本信息 

一般情况下,软件的漏洞信息和特定版本是相关的。因此,软件的版本号对攻击者来说是很有价值的,在浏览器中选择“查看元素 ” 可以看到 Apache 的版本 2.4.25 ,如下图所示。

2a47becfbea84a488f62100b9c8714fc.png

2.1、配置Apache隐藏版本信息 

[root@www ~]# cd /usr/local/httpd/conf/
[root@www conf]# vim httpd.conf  //修改主配置文件
Include conf/extra/httpd-default.conf  //493行取消注释
[root@www conf]# vim extra/httpd-default.conf  //修改extra/httpd-default.confpei配置文件
ServerTokens Prod  //55行将原本的Full改为Prod,只显示名称,没有版本
[root@www conf]# apachectl -t  //验证配置文件是否正确
Syntax OK
[root@www conf]# systemctl restart httpd  //重启httpd服务

ServerTokens表示Server回送给客户端的响应头域是否包含关于服务器OS类型和编译过的模块描述信息。

浏览器访问 http://192.168.23.201或者http://www.kgc.com查看Server项。

954c441e272b4f999497c2048e828621.png 可以看到,版本已经被隐藏了。


3、Apache防盗链 

Apache的默认配置除了性能可以优化外,还需要对安全性进行相应的配置。默认配置能保证服务器正常提供服务,但Apache作为一个软件,必然也会存在一些漏洞,尽可能的降低潜在的风险,是管理员必须掌握的内容。

一般来说,用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个HTTP请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片,那么客户端的浏览器会再次发送一条HTTP请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送HTTP请求才能够被完整的显示。

基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了其他网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。

 HTTP标准协议中有专门的Referer字段记录,它的作用如下。

  1. 可以追溯上一个入站地址是什么。
  2. 对于资源文件,可以跟踪到包含显示它的网页地址是什么,因此所有防盗链方法都是基 于这个Referer字段。

 3.1、配置防盗链

准备两台服务器、一台客户端,且两台服务器上已分别部署完Apache服务。具体实验环境如下表所示。

主机操作系统主机软件及版本
192.168.23.201(源主机)kgc.comCentOS 7.6httpd-2.4.25.tar.gz
192.168.23.202(盗链网站)accp.comCentOS 7.6httpd-2.4.25.tar.gz
客户端Windows 11Edge浏览器

在 Windows 系统中访问 http://192.168.23.201和 http://192.168.23.202,确保Apache工作正常, 如下图所示。

b40a7c36e5d943a0a6fc5257310f62c0.png

b33c17e3fcff40f0b4a4b9367c9e37cd.png 

3.2、检查是否安装mod_rewrite模块 

[root@www ~]# apachectl -t -D DUMP_MODULES | grep "rewrite"
[root@www ~]# 

如果没有安装mod_rewrite模块,重新编译安装Apache添加mod_rewrite模块。

[root@www ~]# systemctl stop httpd.service 
[root@www ~]# cd /usr/local/httpd/conf/
[root@www conf]# mv httpd.conf httpd.conf.bak2
[root@www conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
[root@www httpd-2.4.25]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires
[root@www httpd-2.4.25]# make -j2 && make install

配置mod_rewrite模块启用 

[root@www httpd-2.4.25]# cd /usr/local/httpd/conf/
[root@www conf]# vim httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so  //159行取消注释
226 <Directory "/usr/local/httpd/htdocs">
227     #
228     # Possible values for the Options directive are "None", "All",
229     # or any combination of:
230     #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
231     #
232     # Note that "MultiViews" must be named *explicitly* --- "Options All"
233     # doesn't give it to you.
234     #
235     # The Options directive is both complicated and important.  Please see
236     # http://httpd.apache.org/docs/2.4/mod/core.html#options
237     # for more information.
238     #
239     Options Indexes FollowSymLinks
240 
241     #
242     # AllowOverride controls what directives may be placed in .htaccess files.
243     # It can be "All", "None", or any combination of the keywords:
244     #   AllowOverride FileInfo AuthConfig Limit
245     #
246     AllowOverride None
247 
248     #
249     # Controls who can get stuff from this server.
250     #
251     Require all granted
252     RewriteEngine On
253     RewriteCond %{HTTP_REFERER} !^http://bdqn.com/.*$ [NC]
254     RewriteCond %{HTTP_REFERER} !^http://bdqn.com$ [NC]
255     RewriteCond %{HTTP_REFERER} !^http://www.bdqn.com/.*$ [NC]
256     RewriteCond %{HTTP_REFERER} !^http://www.bdqn.com/$ [NC]
257     RewriteRule .*\.(gif|jpg|swf)$ http://www.bdqn.com/error.png
258 </Directory>

RewriteCond %{HTTP_REFERER} !^http://www.abc.com/.*$ [NC] 的字段含义:

  %{HTTP_REFERER} :存放一个链接的 URL,表示从哪个链接中转访问目录下的静态资源。

  !^”:表示不以后面的字符串开头。

  http://www.abc.com”:是本网站的路径,按整个字符串匹配。

  .*$”:表示以任意字符结尾。

  [NC] :表示不区分大小写字母。

RewriteRule .*\.(gif|jpg|swf)$ http://www.abc.com/error.png 的字段含义:

  . :表示匹配一个字符。

  *”:表示匹配 0 到多个字符,与.合起来的意思是匹配 0 到多次前面的任意字符,如果是 1 到多次匹配可以用+表示。

  “\.”:在这里的\是转义符,\.就代表符号.的意思。因为.在指令中是属于规则字符,有相应的含义, 如果需要匹配,需要在前面加个转义符\,其它规则字符如果需要匹配,也做同样处理。

  (gif|jpg|swf)$ :表示匹配gif、jpg、swf任意一个,$表示结束。最后的规则是以.gif、.jpg、.swf结尾, 前面是1到多个字符的字符串,也就是匹配图片类型的文件。

  http://www.abc.com/error.png :表示转发到这个路径 。

整个配置的含义是使用本网站以外的网站域名访问本站的图片文件时,显示error.png 这个图片。

3.3、网页准备

web源主机配置 

[root@www ~]# cd /usr/local/httpd/htdocs/
[root@www htdocs]# ls
381960.jpg  index.html  phpMyAdmin  test1.php  test2.php
[root@www htdocs]# vim index.html 
<html>
 <body>
    <h1>www.kgc.com</h1>
    <img src="381960.jpg"/>
 </body>
</html>

盗链网站主机配置 

[root@centos7-2 ~]# cd /usr/local/httpd/htdocs/
[root@centos7-2 htdocs]# vim index.html 
<html>
 <body>
  <h1>www.accp.com</h1>
  <img src="http://192.168.23.201/381906.jpg">
 </body>
</html>

在盗图网站主机上进行浏览器验证 

71dbd2f54b4142ce9b1a8f8f8d43f50c.png 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Scikit-Learn线性回归(五)

Scikit-Learn线性回归五&#xff1a;岭回归与Lasso回归 1、误差与模型复杂度2、正则化3、Scikit-Learn岭&#xff08;Ridge&#xff09;回归4、Scikit-Learn Lasso回归 1、误差与模型复杂度 在第二篇文章 Scikit-Learn线性回归(二) 中&#xff0c;我们已经给出了过拟合与模型泛…

均匀与准均匀 B样条算法

B 样条曲线的定义 p ( t ) ∑ i 0 n P i F i , k ( t ) p(t) \sum_{i0}{n} P_i F_{i, k}(t) p(t)i0∑​nPi​Fi,k​(t) 方程中 n 1 n1 n1 个控制点&#xff0c; P i P_i Pi​, i 0 , 1 , ⋯ n i0, 1, \cdots n i0,1,⋯n 要用到 n 1 n1 n1 个 k k k 次 B 样条基函数 …

手游开发项目经验简单总结

这是我最近一个完整的手游开发项目的总结信息&#xff0c;请大家指点 目录 引擎 语言 编辑器 项目开发模块规划分 主项目工程&#xff0c;UI资源项目工程&#xff0c;模型场景资源项目工程 热更框架 前后端协议 UI 图集 多语言适配 SLG场景和其他场景 战斗 美术模型资源 人物…

微信怎么删除聊天记录?进来Get常用的操作方法!

微信是国内使用最广泛的社交应用程序之一。在我们使用微信的过程中&#xff0c;删除聊天记录是一个常见的操作。人们会删除一些不需要的聊天记录&#xff0c;以此减少存储空间的占用。微信怎么删除聊天记录&#xff1f;本文将介绍删除聊天记录的常用方法&#xff0c;非常简单&a…

Git保姆级安装教程

Git保姆级安装教程 一、去哪下载二、安装2.1 具体安装步骤2.2 设置全局用户签名 一、去哪下载 1、官网&#xff08;有最新版本&#xff09;&#xff1a;https://git-for-windows.github.io/ 2、本人学习时安装的版本&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1uAo…

被替换的文件怎么找回?3个高效方法分享!

“我在对电脑进行清理时&#xff0c;删除了一些比较重要的文件&#xff0c;为了恢复它们&#xff0c;我重新复制了一些文件&#xff0c;这导致我原先的文件被替换了&#xff0c;这怎么办呢&#xff1f;被替换的文件还能恢复吗&#xff1f;” 在信息化时代&#xff0c;用户的电脑…

Spark四:Spark Streaming和Structured Streaming

简介 Spark Streaming整体流程和DStream介绍 Structured Streaming发展历史和Dataflow模型介绍 Spark Streaming 是一个基于 Spark Core 之上的实时计算框架&#xff0c;从很多数据源消费数据并对数据进行实时的处理&#xff0c;具有高吞吐量和容错能力强等特点。 Spark Stre…

【完整流程】实现STM32+ESP8266+MQTT+阿里云+APP——【第二节-编写STM32程序初步实现ESP8266上云发布订阅消息】

&#x1f31f;博主领域&#xff1a;嵌入式领域&人工智能&软件开发 前言&#xff1a;本节实现&#xff0c;硬件连接STM32与ESP8266&#xff0c;编写STM32程序通过at命令方式实现STM32ESP8266与阿里云物联网平台发布订阅消息&#xff0c;本节最终实现初步的发布订阅消息…

2024年阿里云服务器按年与按带宽活动价格出炉,最低仅需61元/1年

2024年阿里云服务器活动价格出炉了&#xff0c;新版活动价格表分为按年与按带宽两个价格表&#xff0c;按年最高可选择5年&#xff0c;按带宽可选择按量付费带宽和按固定带宽模式&#xff0c;按年活动价格最低61元/1年&#xff0c;按照带宽模式最低365.33元/1年&#xff0c;不同…

深情回忆VB编程之路

深情回忆VB编程之路 在上世纪90年代末&#xff0c;我与编程世界的初次邂逅始于QBasic这一古老而亲切的语言。那时的编程环境虽然简陋&#xff0c;但却蕴藏着无穷的可能性&#xff0c;每个字符仿佛跳跃着生命&#xff0c;在黑色屏幕中编织出我对编程世界最初的憧憬和梦想。 时光…

计算机网络学习笔记(5)——运输层

本文继续整理计算机网络体系架构知识内容。今日主讲——运输层。 网络层只把分组发送到目的主机&#xff0c;但是真正通信的并不是主机而是主机中的进程。 运输层提供了应用进程间的逻辑通信。运输层向高层用户屏蔽了下面网络层的核心细节&#xff0c;使应用程序看 见的好像在两…

JavaScript基本使用方法

JavaScript 是一种脚本语言&#xff0c;常用于 Web 开发。这里是一些基本的使用方法&#xff1a; 声明变量&#xff1a; 在 JavaScript 中&#xff0c;可以使用 var、let 或 const 关键字来声明变量。例如&#xff1a; var age 25; let name "John"; const PI …

【51单片机】点亮第一个LED灯(含创建文件等基础操作)

51单片机现在不仅是电子信息专业学生的必修课&#xff0c;也是进入嵌入式领域的踏脚石。 本系列将会按照江科大的视频进行&#xff0c;也算是相当于一个笔记&#xff0c;进行巩固 实现第一个LED灯的点亮其实并不复杂&#xff0c;重要的是有一些准备工作比较繁琐&#xff0c;就…

Android RecyleView 使用 Gilde 加载图片引发的卡顿问题

Glide 是一个用于 Android 的图片加载和缓存库。它可以帮助开发者快速、高效地加载网络图片、本地文件和视频帧&#xff0c;并且能够自动缓存图片数据&#xff0c;减少网络请求。Glide 具有良好的性能和易用的 API&#xff0c;支持常见的图片加载需求&#xff0c;例如图片压缩、…

局部与整体的关联特性,如图所示

局部与整体的关联特性是指事物的局部部分与整体之间存在一定的关联关系。它强调整体是由局部构成&#xff0c;局部又反向影响整体。具体包括以下几个方面的特性&#xff1a; 互依性&#xff1a;局部与整体相互依赖&#xff0c;一个的变动会影响另一个的变动。局部的变化会对整体…

bootstrap5实现蛋糕店网页Bakery设计模板

一、需求分析 蛋糕店的网页通常是指蛋糕店的官方网站。这些网页的功能可以因店铺而异&#xff0c;但一般会包含以下内容&#xff1a; 主页&#xff1a;主页通常是网站的起点&#xff0c;展示店铺的品牌形象、特色蛋糕和推广信息。主页通常会设计成吸引人眼球、易于导航的页面。…

vue3 vuedraggable draggable element must have an item slot

vue3vite 看官网使用这种<template #item“{ element }”> <draggablev-model"myArray"start"onStart"end"onEnd":sort"false"item-key"id"draggable".item"handle".mover" ><template…

java发送邮件到qq邮箱

自己的授权码自己记好 引入依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version> </dependency> <dependency><groupId>javax.mail</groupId>&…

机器视觉系统选型-镜头选型常见误区—焦距选择公式

视觉工程师在选择镜头时经常要用到一个公式来选择镜头的焦距。根据这个公式&#xff0c;如果 已知芯片大小、拍摄视野和工作距离的要求&#xff0c;可以算出镜头的焦距。在大部分情况下&#xff0c;这个 公式是可以用的。但这只是一个近似公式&#xff0c;有些情况下使用这个公…

广义双曲分布、KS检验与抄底沪指

上一篇笔记我们抛出一个问题&#xff0c;沪指大跌 4%时&#xff0c;能不能抄底&#xff1f;今天的笔记&#xff0c;我们就通过 KS 检验&#xff0c;找出沪指的概率分布&#xff0c;进而回答这个问题。在后面的笔记中&#xff0c;我们还将换一个方法继续回答这个问题。 K-S 检验…