Nginx 常用安全头
Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头,可以抵御常见的安全威胁(如 XSS、点击劫持、MIME 类型嗅探等),增强用户隐私保护和传输安全性。
常见的 HTTP 安全头及其作用
1. Content-Security-Policy (CSP)
作用:限制资源(如脚本、样式、图片等)的加载来源,防止 XSS 和数据注入攻击。
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none';worker-src blob:;";
配置说明:
- `default-src ‘self’:限制所有资源的默认加载来源为当前域。
script-src 'self'
:仅允许加载来自当前域的脚本。style-src 'self
:限制样式来源为当前域。img-src 'self' data:
:允许图片来自当前域和data:
URI。object-src 'none'
:禁止加载<object>
、<embed>
,防止插件攻击。frame-ancestors 'none'
:禁止页面被嵌套到其他站点的iframe
中。worker-src blob:
:允许 Web Worker 资源来源为blob:
。
注意事项:
- 如果需要加载第三方资源(如 CDN),需显式添加来源。
script-src 'self' https://cdn.jsdelivr.net;
- 避免使用
'unsafe-inline'
和'unsafe-eval'
,减少 XSS 风险。 - 使用
nonce
或hash
机制允许特定的内联脚本:
add_header Content-Security-Policy "script-src 'self' 'nonce-random123';";
2. Strict-Transport-Security (HSTS)
作用:强制浏览器通过 HTTPS 访问网站,防止中间人攻击。
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
配置说明:
max-age=63072000
:HSTS 有效期(以秒为单位),这里是 2 年。includeSubDomains
:对子域名启用 HSTS。preload
:允许网站加入 HSTS 预加载列表。
3. X-Frame-Options
作用:防止页面被嵌套到其他站点的 iframe
中,防止点击劫持攻击。
add_header X-Frame-Options SAMEORIGIN always;
配置说明:
SAMEORIGIN
:仅允许页面被嵌套到自身域的iframe
中。DENY
:彻底禁止页面被嵌套。ALLOW-FROM uri
:仅允许特定来源嵌套页面(需注意已被部分浏览器废弃)。
4. X-XSS-Protection
作用:启用浏览器的 XSS 过滤功能,防止跨站脚本攻击。
add_header X-XSS-Protection "1; mode=block" always;
配置说明:
1; mode=block
:启用 XSS 过滤器并阻止加载恶意脚本的页面。
5. X-Content-Type-Options
作用:防止浏览器对资源类型进行 MIME 嗅探,避免脚本注入攻击。
add_header X-Content-Type-Options "nosniff" always;
配置说明:
nosniff
:强制浏览器使用Content-Type
指定的 MIME 类型。
6. Referrer-Policy
作用:控制 Referer
头信息的发送,保护用户隐私。
add_header Referrer-Policy "origin" always;
配置说明:
origin
:跨域请求时仅发送来源站点信息,不包括完整的 URL。
7. Permissions-Policy (原 Feature-Policy)
作用:限制浏览器功能的使用,防止滥用。
add_header Permissions-Policy "geolocation=(), microphone=(), camera=(), fullscreen=(self);";
配置说明:
- 禁用了地理定位、麦克风、摄像头功能。
- 仅允许自身域使用全屏功能。
8. Cache-Control 和 Pragma
作用:控制缓存行为,防止敏感数据被缓存。
add_header Cache-Control "no-store" always;
add_header Pragma "no-cache" always;
配置说明:
Cache-Control: no-store
:禁止缓存页面内容。Pragma: no-cache
:兼容旧版 HTTP 协议的缓存控制头。
9. Set-Cookie
作用:为 Cookie 添加安全属性,防止 XSS 和中间人攻击。
add_header Set-Cookie "Path=/; HttpOnly; Secure";
配置说明:
HttpOnly
:防止客户端脚本访问 Cookie,避免 XSS。Secure
:仅通过 HTTPS 发送 Cookie。
10. Cross-Origin-Embedder-Policy (COEP)
作用: 限制跨域资源的加载,用于启用跨域隔离。
add_header Cross-Origin-Embedder-Policy "require-corp" always;
配置说明:
require-corp
:仅允许跨域加载具有 CORS 或Cross-Origin-Resource-Policy
标头的资源。
11. Cross-Origin-Opener-Policy (COOP)
作用: 隔离文档上下文,防止跨窗口攻击。
add_header Cross-Origin-Opener-Policy "same-origin" always;
配置说明:
same-origin
:仅允许相同源的页面与当前页面共享浏览上下文。
12. Cross-Origin-Resource-Policy (CORP)
作用: 限制资源的跨域加载。
add_header Cross-Origin-Resource-Policy "same-origin" always;
配置说明:
same-origin
:仅允许资源从相同源加载。
为静态资源启用缓存
为静态资源(如图片、CSS、JS 文件)启用缓存可以显著提升性能,同时不会直接引发安全问题。以下是推荐的配置:
location ~* \.(css|js|png|jpg|jpeg|gif|ico|woff|woff2|ttf|svg|eot|otf)$ {expires 1y;add_header Cache-Control "public";add_header Content-Security-Policy "default-src 'self';";add_header X-Content-Type-Options nosniff;add_header X-Frame-Options SAMEORIGIN;add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";access_log off;
}
配置说明:
expires 1y
:允许静态资源缓存 1 年。Cache-Control: public
:标记资源为公共可缓存。access_log off
:禁用访问日志,减少服务器存储压力。
完整示例配置
安全头配置文件:
add_header Content-Security-Policy "default-src 'self' http: https: blob: ;
script-src 'self' yourJsUrl; object-src 'self';
img-src 'self' data: blob: yourimgUrl; style-src 'unsafe-inline' http: ;
frame-ancestors 'self'; worker-src blob:;" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options: nosniff always;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
add_header Referrer-Policy origin always;
add_header Cache-Control no-store always;
add_header Pragma no-cache always;
add_header X-Permitted-Cross-Domain-Policies none always;
add_header X-Download-Options noopen always;
add_header Set-Cookie "Path=/; HttpOnly; Secure" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
如果js和img需要配置允许的域名,替换路径即可。
跨域头配置文件:
add_header 'Access-Control-Allow-Origin' "$cors_origin" always;
add_header 'Vary' 'Origin' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With' always;
add_header 'Access-Control-Max-Age' "$cors_max_age" always;
Nginx 的default.conf配置示例:
# 动态设置允许的跨域来源
map $http_origin $cors_origin {default "";"~^https?://trusteddomain1.com$" $http_origin;"~^https?://trusteddomain2.com$" $http_origin;
}# 动态设置缓存时间
map $http_origin $cors_max_age {default "0";"~^https?://trusteddomain1.com$" "86400"; # 1 天"~^https?://trusteddomain2.com$" "3600"; # 1 小时
}
server {listen 8081;listen [::]:8081;server_name localhost;root /usr/share/nginx/html/applet/dist/build/h5/;server_tokens off;include /etc/nginx/conf.d/safety_headers.conf;location ~* \.(css|js|png|jpg|jpeg|gif|ico|woff|woff2|ttf|svg|eot|otf)$ {expires 1y;include /etc/nginx/conf.d/safety_headers.conf;add_header Cache-Control "public";access_log off;}# 禁止敏感路径访问location = /auth/ {deny all;return 404;}error_page 403 =404 /404.html;location = /404.html {root /usr/share/nginx/html;}# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}location ~* ^/(code|authFront|adminplus|external|auth|admin|marry){include /etc/nginx/conf.d/safety_headers.conf;# 设置 CORS 响应头include /etc/nginx/conf.d/cors_headers.conf;# 如果是预检请求 (OPTIONS),直接返回成功if ($request_method = 'OPTIONS') {# 设置 CORS 响应头add_header 'Access-Control-Allow-Origin' "$cors_origin" always;add_header 'Vary' 'Origin' always;add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With' always;add_header 'Access-Control-Max-Age' "$cors_max_age" always; add_header 'Content-Length' 0;add_header 'Content-Type' 'text/plain';return 204;} proxy_pass backendUrl;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 1024m;proxy_buffer_size 1024k;proxy_buffers 16 1024k;proxy_busy_buffers_size 2048k;proxy_temp_file_write_size 2048k;}#location /manage {
# alias /usr/share/nginx/html/manage/dist/;
#}location ~^/oss/crossdomain.xml {return 403;}
location ~^/oss/(.*HOST.*){return 403;}location ~^/oss/ {
proxy_buffering off;
proxy_set_header Host $http_host;
rewrite ^/oss/(.*)$ /$1 break;
proxy_pass http://172.17.0.1:9000;
}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html##error_page 500 502 503 504 /50x.html;#location = /50x.html {# root /usr/share/nginx/html;#}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}
}
参考:http-headers-MDN
相关文章:
Nginx 常用安全头
Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头,可以抵御常见的安全威胁(如 XSS、点击劫持、MIME 类型嗅探等),增强用户隐私保护和传输安全性。 常见的 HTTP 安全头及其作用 1. Content-Se…...
消息队列(一)消息队列的工作流程
什么是消息队列 首先,代入一个场景,我现在做一个多系统的集成,分别有系统A、B、C、D四个系统,A系统因为使用产生了业务数据,B、C、D需要使用这些数据做相关的业务处理和运算,最基本的做法就是通过接口通信…...
LeetCode 2605 从两个数字数组里生成最小数字
探寻两个数组数位关联下的最小数字问题 题目描述 给定两个只包含 1 到 9 之间数字的数组 nums1 和 nums2,并且每个数组中的元素都是互不相同的。我们需要返回最小的数字,要求这个数字满足两个数组都至少包含这个数字的某个数位。例如,若 nu…...
AI新书推荐:深度学习和大模型原理与实践(清华社)
本书简介 在这个信息爆炸、技术革新日新月异的时代,深度学习作为人工智能领域的重要分支,正引领着新一轮的技术革命。《深度学习和大模型原理与实践》一书,旨在为读者提供深度学习及其大模型技术的全面知识和实践应用的指南。 本书特色在于…...
32单片机串口数据接收、空闲IDLE中断详解
一、前提说明 一开始写单片机程序的时候不太清楚空闲中断这个东西,每次用串口接收数据,都要再开一个定时器,在定时器内进行倒计时,每次接收数据就重置计时时间,计时结束就触发中断,再判断所有接收的数据&am…...
WebRtc webrtc-streamer部署
文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...
shiro注入filter内存马(绕过长度限制)
shiro环境 https://github.com/yyhuni/shiroMemshell(实验环境) 这里用的 Client_memshell.java package com.example.demo;import javassist.ClassPool; import javassist.CtClass; import org.apache.shiro.crypto.AesCipherService; import org.ap…...
Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传
参考:https://juejin.cn/post/6870837414852886542#heading-9 一般计算大文件的md5都是前端来做,因为如果后端来做,那得等到上传成功后才能计算md5值,并且读取的时间也很长。 为了解决文件大传输慢的问题,前端可以通…...
渗透Vulnhub-DC-9靶机
本篇文章旨在为网络安全渗透测试行业靶机教学。通过阅读本文,读者将能够对渗透Vulnhub系列DC-6靶机有定的了解 一、信息收集阶段 DC-9靶场信息: DC-9靶场介绍: https://www.vulnhub.com/entry/dc-9,412/ DC-9靶场下载: https://download.vu…...
springboot477基于vue技术的农业设备租赁系统(论文+源码)_kaic
摘 要 使用旧方法对农业设备租赁系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在农业设备租赁系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的农…...
CentOS常见命令
CentOS(Community ENTerprise Operating System)基于Red Hat Enterprise Linux(RHEL)源代码开发,是常用的Linux发行版之一。在CentOS系统中,有许多命令用于管理和操作系统,以下是一些CentOS系统…...
oracle 设置归档日志存放路径
oracle 设置归档日志存放路径 1、创建新目录 mkdir /archive chown -R oracle:oinstall /archive 注:条件允许的话,/archive 目录应独立挂载。1、便于监控目录使用率;2、避免和其它文件混淆,便于管理。 2、设置归档日志存放路…...
机器学习1-简单神经网络
相比传统的机器学习算法,深度学习做出了哪些改进呢?其实两者在理论结构上是一致的,即:模型假设、评价函数和优化算法,其根本差别在于假设的复杂度 构建简单神经网络(未训练): # 封装…...
C++的侵入式链表
非侵入式链表 非侵入式链表是一种链表数据结构,其中每个元素(节点)并不需要自己包含指向前后节点的指针。链表的结构和节点的存储是分开的,链表容器会单独管理这些指针。 常见的非侵入式链表节点可以由以下所示,即&a…...
MFC案例:图片文件转图标(ico)格式
本案例程序目的是将一般图像文件转换成图标格式(ico)。实现起来不是很复杂,这里为了介绍MFC的具体使用方法,在程序界面上分成几个功能块,包括:打开图像文件、选择ICON大小、转换、预览、保存等。相关具体步骤如下: 一、…...
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
文章目录 一、软件下载安装1、Unity官网2、下载Unity Hub 二、修改Unity Hub配置1、设置Unity Hub中文语言2、修改默认存储目录 三、安装unity编辑器1、点击安装编辑器2、版本选择3、关于版本号4、安装模块选择5、等待下载完成自动安装即可6、追加unity和模块 四、许可证管理专…...
东子生物完成A轮战略融资,数字商品交易全新升级为数商时代
2024年11月23日,东子生物数字时代正式上线,标志着公司全面迈入“数商时代”,作为国内领先的生物科技企业,东子生物在数字化浪潮中精准布局,以创新科技推动产业升级,以全新的思维引领健康产业,兼…...
数据结构经典算法总复习(上卷)
第一章:数据结构导论 无重要考点,仅需了解时间复杂度。 第二章:线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…...
电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?
电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误:原因与解决方案 在日常电脑使用中,我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件,如CorelDRAW(简称CDR)时,可能会遇到“计算…...
oracle使用imp命令导入dmp文件
需求: 增量导入 tbl_servicelegalclause 表数据(dmp格式)。 导入思路:使用 dba 创建一个 临时库,先将 tbl_servicelegalclause.dmp(增量的数据) 文件导入到 临时库,然后确认临时库数…...
电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决
电脑蓝屏是让许多用户头疼的问题,其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法,能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏,如金手指氧化、芯片…...
Logback日志框架中的继承机制详解
在Logback框架中,logger的继承机制是基于层级结构(hierarchical context)工作的。每个logger都被分配一个名称,这个名称可以看作是一个路径或目录结构,从而形成了一个逻辑上的树状结构。这种结构使得日志记录具有很强的…...
[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算
在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…...
node.js的异步工作之---回调函数与回调地狱
回调函数:在 Node.js 中,很多 API 都是异步的,通常通过回调函数来处理操作完成后的结果。这种回调模式虽然非常高效,但会导致代码逐渐变得难以维护,尤其是当有多个异步操作嵌套时(即回调地狱)。…...
tcp 的三次握手与四次挥手
问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...
《三角洲行动》游戏运行时提示“缺失kernel32.dll”:问题解析与解决方案
《三角洲行动》游戏运行时提示“缺失kernel32.dll”:问题解析与解决方案 作为软件开发领域的一名从业者,我深知电脑游戏运行过程中可能遇到的各种挑战,尤其是文件丢失、文件损坏以及系统报错等问题。今天,我将以经典游戏《三角洲…...
Android——自定义按钮button
项目中经常高频使用按钮,要求:可设置颜色,有圆角且有按下效果的Button 一、自定义按钮button button的代码为 package com.fslihua.clickeffectimport android.annotation.SuppressLint import android.content.Context import android.gra…...
Pandas基础学习(1)
之前看的pandas的教材和课程里,内容参差不齐,实际使用很少的方法的内容有点多,导致很乱而且记不住那么多,这个帖子尽量用最少的文字,最精炼的语言来总结比较实用的方法,内容主要来源于《利用python进行数据…...
20241224在Ubuntu20.04.6下给X99平台上的M6000显卡安装驱动程序
20241224在Ubuntu20.04.6下给X99平台上的M6000显卡安装驱动程序 2024/12/24 16:18 下载驱动程序: https://www.nvidia.cn/drivers/lookup/ https://www.nvidia.cn/drivers/results/ https://www.nvidia.cn/drivers/details/237923/ https://www.nvidia.cn/drivers/l…...
批量多线程给TXT文档插入相关腾讯AI【高质量无水印无版权】原创图片
给蜘蛛访问的网站文章插入相关图片,可以带来以下好处: 1、提升用户体验:图片能够直观地展示文章内容,帮助用户更好地理解和消化信息。对于阅读者来说,图文并茂的内容往往更具吸引力,也能提高他们的阅读…...
保护模式基本概念
CPU 架构 RISC(Reduced Instruction Set Computer) 中文即"精简指令集计算机”。RISC构架的指令格式和长度通常是固定的(如ARM是32位的指令)、且指令和寻址方式少而简单、大多数指令在一个周期内就可以执行完毕 CISC&…...
mysql 查询优化之字段建立全文索引
最近在接手一些老项目时发现表设计存在问题导致查询较慢 例如一张旧表的设计: 模糊匹配某个关键字时,需要十几秒左右,而且表的数据量不多 都知道mysql8.0版本InnoDB引擎都支持全文索引了,因此可以在content建立全文索引,但全文索引对中文支持并不完善…...
redis和mysql的区别
Redis是一种非关系型数据库(NoSQL),将数据存储在缓存中,这虽然提高了运行效率,但是保存时间却很短。将数据存储在内存中,因此读写速度非常快,特别适合用于需要高速访问的场景,如缓存…...
【Laravel】接口的访问频率限制器
Laravel 接口的访问频率,你可以在 Laravel 中使用速率限制器(Rate Limiter)。以下是一个详细的步骤,展示如何为这个特定的 API 路由设置速率限制: 1. 配置 RouteServiceProvider 首先,确保在 App\Provide…...
LabVIEW水泵性能测试系统
在现代工业应用中,水泵作为一种广泛使用的流体输送设备,其性能的可靠性对整个生产系统的稳定运行至关重要。通过LabVIEW软件配合专业硬件设备,设计了一套水泵性能测试系统,实现对各类水泵的综合性能测试与分析,提升水泵…...
基于推理的目标检测 DetGPT
基于推理的目标检测 DetGPT flyfish detgpt.github.io 近年来,由于大型语言模型(LLMs)的发展,计算机视觉领域取得了重大进展。这些模型使人类与机器之间能够进行更有效、更复杂的交互,为模糊人类与机器智能界限的新技…...
【Java 基础】-- ArrayList 和 Linkedlist
目录 1. Java 中的 ArrayList 和 LinkedList 简介 ArrayList LinkedList 2. 相同数量级下的内存开销对比 ArrayList 的内存开销 LinkedList 的内存开销 3. 它们的速度对比 总结 1. Java 中的 ArrayList 和 LinkedList 简介 ArrayList 数据结构:基于动态数组…...
电脑不小心删除了msvcr120.dll文件怎么办?“缺失msvcr120.dll文件”要怎么解决?
一、文件丢失与损坏的常见原因及解决办法 1. 不小心删除系统文件 常见情况:有时在清理电脑垃圾文件时,可能会不小心删除一些重要的系统文件,如msvcr120.dll等。解决办法: 恢复文件:如果刚删除不久,可以尝…...
数据结构----链表头插中插尾插
一、链表的基本概念 链表是一种线性数据结构,它由一系列节点组成。每个节点包含两个主要部分: 数据域:用于存储数据元素,可以是任何类型的数据,如整数、字符、结构体等。指针域:用于存储下一个节点&#…...
【面试 - 遇到的问题】Vue 里 router-view 使用 key + 关闭页面后重新打开页面-获取的数据赋值到旧组件问题(钩子执行顺序)
目录 【1】问题描述【2】问题排查前 - 页面渲染、tag 页签渲染 逻辑梳理页面渲染【借用别人的描述】<router-view :key"key" />1. 不设置key 属性2. 设置 key 属性值为 $route.path/page/1 > /page/2/page?id1 > /page?id2, 3. 设置 key 属性值为 $rou…...
Dubbo简单总结
1、dubbo服务暴露的流程 ulr:protocol://username:password@host:port/path?param1=value1¶m2=value2 a、服务的暴露起始于 Spring IOC 容器刷新完毕之后,会根据配置参数组装成 URL, 然后根据 URL 的参数来进行本地或者远程调用。 b、会通过 proxyFactory.getInv…...
智慧社区电商系统:提升用户体验的界面设计
3.1可行性分析 开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该智慧社区电子商务系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&…...
电感降额和选型规范
通常元器件有一个最佳降额范围,在此范围内,元器件工作应力的降低对其失效率的下降有显著的改善,设备的设计易于实现,且不必在设备的质量,体积,成本方面付出大的代价,应按设备可靠性要求…...
STM32HAL库中RTC闹钟设置时分秒,年月日
在STM32的HAL库中,RTC(实时时钟)模块提供了多种功能来管理时间和日期,包括设置闹钟。对于RTC闹钟功能,确实主要集中在时、分、秒的配置上,但年、月、日也可以通过RTC日期寄存器进行设置,并且可以…...
linux-19 根文件系统(一)
之前提到过,linux的目录是一个倒置的树,它通过层次性的方式来组织,管理整个系统的文件,而这本身实际上是通过文件系统。文件系统,大家记得文件系统是内核的主要功能之一, 它的主要目的就是实现本机上的某一…...
kotlin中泛型中in和out的区别
概念含义 in关键字(逆变) 在Kotlin泛型中,in关键字主要用于定义逆变(Contravariance)。它表示一个泛型类型参数可以是指定类型或者它的超类型。简单来说,就是对于类型A和B,如果A是B的子类型&…...
Spring学习(一)——Sping-XML
一、Spring的概述 (一)什么是Spring? Spring是针对bean对象的生命周期进行管理的轻量级容器。提供了功能强大IOC、AOP及Web MVC等功能。Spring框架主要由七部分组成:分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 S…...
设计模式——桥接模式
文章目录 1. 定义2. 结构组成3. 桥接模式结构4. 示例代码5. 模式优势6. 总结 1. 定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的主要目的是将抽象部分与它的实现部分分离,使它们都可以独立地变化。 2. 结构组成 桥接模…...
python Enum类介绍及cls关键字用法详解
文章目录 Enum 类基本用法定制枚举枚举方法枚举类方法 cls 关键字类方法工厂方法总结 在 Python中, Enum 类和 cls 关键字有一些特定的用法和含义。下面我将详细解释它们的用法: Enum 类 Enum 类是Python标准库中的一个类,用于创建枚举&a…...
模型的多GPU并行训练,DDP
DDP全称是DistributedDataParallel, 在torch.nn.parallel里面。 今天总结一下用DDP进行多GPU并行训练的方法, 内容来自build gpt2加上自己的补充。 如果你有多块GPU,就可以充分利用它们。 DDP会创建多个process(进程,不是线程哦&…...