higress使用了解
higress使用了解
了解下 http-echo、httpbin 镜像使用
未按文档实际搭建,但大致是这样
官方文档:https://higress.io/zh-cn/docs/overview/what-is-higress
了解:利用sealos快速安装kubernetes集群:https://note.youdao.com/s/M2z4OzsL
# 使用Helm 安装Higress
[root@vm ~]# helm repo add higress.io https://higress.io/helm-charts
[root@vm ~]# helm install higress -n higress-system higress.io/higress --create-namespace --render-subchart-notes --set higress-console.domain=console.higress.io# 登录密码查看
[root@vm ~]# export ADMIN_USERNAME=$(kubectl get secret --namespace higress-system higress-console -o jsonpath="{.data.adminUsername}" | base64 -d)
[root@vm ~]# export ADMIN_PASSWORD=$(kubectl get secret --namespace higress-system higress-console -o jsonpath="{.data.adminPassword}" | base64 -d)
[root@vm ~]# echo -e "Username: ${ADMIN_USERNAME}\nPassword: ${ADMIN_PASSWORD}"
1、测试
#创建一个pod
kind: Pod
apiVersion: v1
metadata:name: foo-applabels:app: foo
spec:containers:- name: foo-appimage: higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/http-echo:0.2.4-alpineargs:- "-text=foo" # 访问返回 foo
---
kind: Service
apiVersion: v1
metadata:name: foo-service
spec:selector:app: fooports:# Default port used by the image- port: 5678
# 使用 Ingress CRD 进行路由配置,编写foo-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: foo
spec:ingressClassName: higress # 使用higress 只需要在ingress里添加ingressClassNamerules:- host: foo.bar.comhttp:paths:- pathType: Prefixpath: "/foo"backend:service:name: foo-serviceport:number: 5678 #
# 集群内访问
curl http://10.96.1.19/foo -H 'host: foo.bar.com' # foo
2、Higress流量治理实战
在Higress上可以使用Ingress并借助Annotation实现高阶流量治理
2.1 灰度发布
Higress提供复杂的路由处理能力,支持基于Header、Cookie以及权重的灰度发布功能。灰度发布功能可以通过设置注解来实现,为了启用灰度发布功能,
需要设置注解:higress.io/canary: "true"
。通过不同注解可以实现不同的灰度发布功能。
说明:当多种方式同时配置时,灰度方式选择优先级为:基于Header > 基于Cookie > 基于权重(从高到低)。
部署两个版本的服务
1)在集群中部署第一个版本的 Deployment,本文以 nginx-v1 为例。YAML 示例如下:
---
apiVersion: v1
kind: Service
metadata:name: nginx-v1
spec:type: ClusterIPports:- port: 80protocol: TCPname: httpselector:app: nginxversion: v1
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1
spec:replicas: 1selector:matchLabels:app: nginxversion: v1template:metadata:labels:app: nginxversion: v1spec:containers:- name: nginximage: "openresty/openresty:centos"ports:- name: httpprotocol: TCPcontainerPort: 80volumeMounts:- mountPath: /usr/local/openresty/nginx/conf/nginx.confname: configsubPath: nginx.confvolumes:- name: configconfigMap:name: nginx-v1---
apiVersion: v1
kind: ConfigMap
metadata:labels:app: nginxversion: v1name: nginx-v1
data:nginx.conf: |-worker_processes 1;events {accept_mutex on;multi_accept on;use epoll;worker_connections 1024;}http {ignore_invalid_headers off;server {listen 80;location / {access_by_lua 'local header_str = ngx.say("nginx-v1")';}location /hello {access_by_lua 'local header_str = ngx.say("hello nginx-v1")';}}}
2)再部署第二个版本的 Deployment,本文以 nginx-v2 为例。YAML 示例如下:
---
apiVersion: v1
kind: Service
metadata:name: nginx-v2
spec:type: ClusterIPports:- port: 80protocol: TCPname: httpselector:app: nginxversion: v2
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v2
spec:replicas: 1selector:matchLabels:app: nginxversion: v2template:metadata:labels:app: nginxversion: v2spec:containers:- name: nginximage: "openresty/openresty:centos"ports:- name: httpprotocol: TCPcontainerPort: 80volumeMounts:- mountPath: /usr/local/openresty/nginx/conf/nginx.confname: configsubPath: nginx.confvolumes:- name: configconfigMap:name: nginx-v2
---
apiVersion: v1
kind: ConfigMap
metadata:labels:app: nginxversion: v2name: nginx-v2
data:nginx.conf: |-worker_processes 1;events {accept_mutex on;multi_accept on;use epoll;worker_connections 1024;}http {ignore_invalid_headers off;server {listen 80;location / {access_by_lua 'local header_str = ngx.say("nginx-v2")';}location /hello {access_by_lua 'local header_str = ngx.say("hello nginx-v2")';}}}
基于Header灰度发布
- 只配置
higress.io/canary-by-header
:基于Request Header的名称进行流量切分。当请求包含该Header并且值为always时,请求流量会被分配到灰度服务入口;其他情况时,请求流量不会分配到灰度服务。 - 同时配置
higress.io/canary-by-header
和higress.io/canary-by-header-value
:基于Request Header的名称和值进行流量切分。当请求中的header的名称和header的值与该配置匹配时,请求流量会被分配到灰度服务;其他情况时,请求流量不会分配到灰度服务。
1、请求Header为higress: always
时将访问灰度服务nginx-v2;其他情况将访问正式服务nginx-v1,配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/canary: "true"higress.io/canary-by-header: "higress"name: higress-demo-canary
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v2port: number: 80path: /hellopathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: higress-demo
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v1port: number: 80path: /hellopathType: Exact
curl -H "higress: always" http://10.96.1.19/hello # hello nginx-v2
2、请求Header为higress: v2
和higress: always
时将访问灰度服务nginx-v2;其他情况将访问正式服务nginx-v1,配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/canary: "true"higress.io/canary-by-header: "higress"higress.io/canary-by-header-value: "v2"name: higress-demo-canary
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v2port: number: 80path: /hellopathType: Exact---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: higress-demo
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v1port: number: 80path: /hellopathType: Exact
curl -H "higress: v2" http://10.96.1.19/hello # hello nginx-v2
curl -H "higress: always" http://10.96.1.19/hello # hello nginx-v2
curl -H "higress: v1" http://10.96.1.19/hello # hello nginx-v1
curl -H "higress: always1" http://10.96.1.19/hello # hello nginx-v1
基于Cookie灰度发布
higress.io/canary-by-cookie
:基于Cookie的Key进行流量切分。当请求的Cookie中含有该Key且其值为always时,请求流量将被分配到灰度服务;其他情况时,请求流量将不会分配到灰度服务。
说明:基于Cookie的灰度发布不支持自定义设置Key对应的值,只能是always。
请求的Cookie为demo=always时将访问灰度服务nginx-v2;其他情况将访问正式服务nginx-v1。配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/canary: "true"higress.io/canary-by-cookie: "demo"name: higress-demo-canary
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v2port: number: 80path: /hellopathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: higress-demo
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v1port: number: 80path: /hellopathType: Exact
curl --cookie "demo=always" http://10.96.1.19/hello
基于权重灰度发布
- higress.io/canary-weight:设置请求到指定服务的百分比(值为0~100的整数)
- higress.io/canary-weight-totatl:设置权重总和,默认为100
配置灰度服务nginx-v2的权重为30%,配置正式服务nginx-v1的权重为70%。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/canary: "true"higress.io/canary-weight: "30"name: higress-demo-canary
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v2port: number: 80path: /hellopathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: higress-demo
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v1port: number: 80path: /hellopathType: Exact
2.2 跨域测试
测试页面 保存为html文件,浏览器打开即可
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body><h3 id="demo"></h3>
</body>
<script>$.get('http://192.168.65.130:30332/hello',function(data){console.log(data)$('#demo').html(data);});
</script>
</html>
跨域资源共享CORS(Cross-Origin Resource Sharing)是指允许Web应用服务器进行跨域访问控制,从而实现跨域数据安全传输。
- higress.io/enable-cors:“true” or “false”。开启或关闭跨域。
- higress.io/cors-allow-origin:允许的第三方站点,支持泛域名,逗号分隔;支持通配符。
- higress.io/cors-allow-methods:允许的请求方法,如GET、POST,逗号分隔;支持通配符*。默认值为GET, PUT, POST, DELETE, PATCH, OPTIONS。
- higress.io/cors-allow-headers:允许的请求头部,逗号分隔;支持通配符*。默认值为DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization。
- higress.io/cors-expose-headers:允许的响应头部,逗号分隔。
- higress.io/cors-allow-credentials:“true” or “false”。是否允许携带凭证信息。默认允许。
- higress.io/cors-max-age:预检结果的最大缓存时间,单位为秒;默认值为1728000。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/enable-cors: "true"higress.io/cors-allow-origin: "*"higress.io/cors-allow-methods: "GET,POST"higress.io/cors-allow-credentials: "false"name: higress-demo
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: nginx-v1port: number: 80path: /hellopathType: Exact
部署之后测试,可以正常访问
2.3 Rewrite重写
在请求转发给目标后端服务之前,重写可以修改原始请求的路径(Path)和主机域(Host)。
- higress.io/rewrite-target:重写Path。
- higress.io/upstream-vhost:重写Host。
准备测试服务httpbin
httpbin.org 一个简单的 HTTP 请求和响应服务,用 Python + Flask 编写。 #调试 各种响应结果
官网地址:https://httpbin.org/
使用helm安装httpbin
helm repo add rgnu https://gitlab.com/mulesoft-int/helm-repository/-/raw/master/
helm install my-httpbin rgnu/httpbin --version 1.0.0
cur 10.96.1.15/get?name=fox #访问httpbin
Rewrite重写Path
- 将请求example.com/test在转发至后端服务之前,重写为example.com/get
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/rewrite-target: "/get"name: higress-demo
spec:ingressClassName: higressrules:- host: example.comhttp:paths:- backend:service:name: my-httpbinport: number: 80path: /testpathType: Exact
curl 10.96.1.19/test?name=fox -H "host: example.com" # 响应 http://example.com/get
2.将请求example.com/v1/get在转发至后端服务之前,去掉Path前缀/v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/rewrite-target: "/$2"name: higress-demo
spec:ingressClassName: higressrules:- host: example.comhttp:paths:- backend:service:name: my-httpbinport: number: 80path: /v1(/|$)(.*) # $1表示路径中正则表达式匹配的第一个()的内容,$2为第二个,以此类推。pathType: ImplementationSpecific
curl 10.96.1.19/v1/get?name=fox -H "host: example.com" #响应 http://example.com/get
2.4 Header控制
通过Header控制,您可以在转发请求到后端服务之前对请求Header进行增删改,在收到响应转发给客户端时对响应Header进行增删改。
请求Header控制
- higress.io/request-header-control-add:请求在转发给后端服务时,添加指定Header。若该Header存在,则其值拼接在原有值后面。语法如下:
- 单个Header:Key Value
- 多个Header:使用yaml特殊符号 |,每对Key Value单独处于一行
- higress.io/request-header-control-update:请求在转发给后端服务时,修改指定Header。若该header存在,则其值覆盖原有值。语法如下:
- 单个Header:Key Value
- 多个Header:使用yaml特殊符号 |,每对Key Value单独处于一行
- higress.io/request-header-control-remove:请求在转发给后端服务时,删除指定Header。语法如下:
- 单个Header:Key
- 多个Header:逗号分隔
1.对于请求example.com/headers添加两个Header,foo: bar和test: true。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/request-header-control-add: |foo: bartest: truename: demo
spec:ingressClassName: higressrules:- host: example.comhttp:paths:- backend:service:name: my-httpbinport: number: 80path: /headerspathType: Exact
curl 10.96.1.19/headers -H "host: example.com" # 添加了请求头 foo test
- Header控制可以结合灰度发布,对灰度流量进行染色。请求Header为higress:v2时将访问灰度服务nginx-v2,并添加Header,stage: gray;其他情况将访问正式服务nignx-v1,并添加Header,stage: prod。配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/canary: "true"higress.io/canary-by-header: "higress"higress.io/canary-by-header-value: "v2"higress.io/request-header-control-add: "stage gray"name: higress-demo-canary
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: my-httpbin-canaryport: number: 80path: /headerspathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/request-header-control-add: "stage prod"name: higress-demo
spec:ingressClassName: higressrules:- http:paths:- backend:service:name: my-httpbinport: number: 80path: /headerspathType: Exact
helm install my-httpbin-canary rgnu/httpbin --version 1.0.0
部署之后执行以下命令进行测试
curl 10.96.1.19/headers -H "higress: v2" # 请求头带 stage:gray
响应Header控制
- higress.io/response-header-control-add:请求在收到后端服务响应之后并且转发响应给客户端之前,添加指定Header。若该Header存在,则其值拼接在原有值后面。语法如下:
- 单个Header:Key Value
- 多个Header:使用yaml特殊符号 |,每对Key Value单独处于一行
- higress.io/response-header-control-update:请求在收到后端服务响应之后并且转发响应给客户端之前,修改指定Header。若该header存在,则其值覆盖原有值。语法如下:
- 单个Header:Key Value
- 多个Header:使用yaml特殊符号 |,每对Key Value单独处于一行
- higress.io/response-header-control-remove:请求在收到后端服务响应之后并且转发响应给客户端之前,删除指定Header。语法如下:
- 单个Header:Key
- 多个Header:逗号分隔
对于请求example.com/headers的响应删除Header:req-cost-time。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:higress.io/response-header-control-remove: "req-cost-time"name: higress-demo
spec:ingressClassName: higressrules:- host: example.comhttp:paths:- backend:service:name: my-httpbinport: number: 80path: /headerspathType: Exact
正常的响应结果
# -I 打印响应头
curl 10.96.1.19/headers -H "host: example.com" -I
Higress插件实战
https://higress.io/zh-cn/docs/plugins/intro
https://higress.io/zh-cn/docs/plugins/intro
3.1 通过 Higress 控制台进行配置
Higress 控制台提供了 3 个入口进行插件配置:
1.全局配置:插件市场->选择插件进行配置
2.域名级配置:域名管理->选择域名->点击策略->选择插件进行配置
3.路由级配置: 路由配置->选择路由->点击策略->选择插件进行配置
这三个配置的生效优先级是: 路由级 > 域名级 > 全局
3.2 通过 Higress WasmPlugin CRD 进行配置
Higress WasmPlugin CRD 在 Istio WasmPlugin CRD 的基础上进行了扩展,新增以下配置字段:全局插件,全局限流 路由--策略配置限流
wasm插件使用kubectl get wasmPlugin -n higress-system
kubectl describe wasmPlugin key-rate-limit-1.0.0 -n higress-system
参考:https://note.youdao.com/s/cAE1VMEN
相关文章:
higress使用了解
higress使用了解 了解下 http-echo、httpbin 镜像使用 未按文档实际搭建,但大致是这样 官方文档:https://higress.io/zh-cn/docs/overview/what-is-higress 了解:利用sealos快速安装kubernetes集群:https://note.youdao.com/s…...

Swagger3探索之游龙入海
引言 后端开发中常用的接口调用工具一般使用Postman、ApiPost工具,但后期需要与前端联调,要补充接口文档花费大量时间,此时Swagger3应运而生,大大提高沟通交流的效率。 引用依赖 <!-- Swagger3 调用方式 http://ip:port/swa…...

javaWeb项目-学生考勤管理系统功能介绍
项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JAVA技术 JavaSc…...

云备份项目认识、环境搭建以及所使用的库的介绍
一、云备份认识 将本地计算机一个受监管的文件夹的文件上传到服务器中,有服务器组织,客户端可以通过网页将文件查看并且下载下来,下载过程支持断点续传功能,并且服务器会对上传的文件进行热点管理,长时间没人访问的文…...

汇编语言第四版-王爽第2章 寄存器
二进制左移四位,相当于四进制左移一位。 debug命令实操,win11不能启动,需要配置文件 Windows64位系统进入debug模式_window10系统64位怎么使用debugger-CSDN博客...

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索
宗喆和张正分别给我们带了 KCL 相关的最新进展,由蚂蚁集团开发的 Rust 编写的开源 DSL,目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念,解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…...

云原生靶场kebernetesGoat、Metarget
靶场 文章目录 靶场kebernetesGoat靶场安装Docker in DockerSSRF漏洞容器逃逸到主系统Docker CIS 基线分析Kubernetes CIS 安全基线分析分析被部署挖矿软件的容器镜像获取环境信息Hidden in layersRBAC最低权限配置错误使用 Sysdig Falco 进行运行时安全监控和检测 Metarget ke…...

【3D目标检测】Det3d—SE-SSD模型训练(前篇):KITTI数据集训练
SE-SSD模型训练 1 基于Det3d搭建SE-SSD环境2 自定义数据准备2.1 自定义数据集标注2.2 训练数据生成2.3 数据集分割 3 训练KITTI数据集3.1 数据准备3.2 配置修改3.3 模型训练 1 基于Det3d搭建SE-SSD环境 Det3D环境搭建参考:【3D目标检测】环境搭建(OpenP…...

k8s1.28.8版本安装prometheus并持久化数据
本文参考 [k8s安装prometheus并持久化数据_/prometheus-config-reloader:-CSDN博客](https://blog.csdn.net/vic_qxz/article/details/119598466)前置要求: 已经部署了NFS或者其他存储的K8s集群. 这里注意networkpolicies网络策略问题,可以后面删除这个策略&#x…...

Mybatis-特殊SQL的执行
1. 模糊查询 在MyBatis中进行模糊查询时,有以下三种常见的实现方式: 1.1. 错误示范 先来个准备操作,并做一个错误示例 根据姓名,模糊查询用户,(x小x) 更新数据表 SQLMapper.java package com.sakurapaid.mybatis3…...

金融衍生品市场
金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值(Hedging) 组合多头头寸(long position)与空头头寸(short position)例:股票与股指期货 投机 衍生金融工具 远期合约 定义:在将来…...

2、Cocos Creator 下载安装
Cocos Creator 从 v2.3.2 开始接入了全新的 Dashboard 系统,能够同时对多版本引擎和项目进行统一升级和管理!Cocos Dashboard 将做为 Creator 各引擎统一的下载器和启动入口,方便升级和管理多个版本的 Creator。还集成了统一的项目管理及创建…...
Docker版本:18.06.1安装
1、操作系统:CentOS 7.5以上 2、Docker版本:18.06.1 1、解压 tar -xvf docker-18.06.1-ce.tgz2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下 cp docker/* /usr/bin/3、将docker注册为service vim /etc/systemd/system/docker.service将下列…...
记 SpringBoot 使用@RequestBody 接收不到参数
POST请求,前端传的参数名字跟后端规定的参数一样。但是通过RequestBody注解接收的参数始终为NULL! //实体类中属性没有用驼峰命名 private String SubscribeID; /*** 标题*/ private String Title;解决方案: 1、字段上使用JsonProperty(valu…...

unity 打包安卓错误汇集
Failed to find target with hash string "android-34’ in: D:Pr 他说找不到sdk34level的我用as打开后卸载又重装,最后解决了 我放到Plugins/Android/下面的Java代码没有被编译 这个不知道为什么。我故意把代码写的有问题,会报错那种ÿ…...

C语言-文件操作
🌈很高兴可以来阅读我的博客!🌟我热衷于分享🖊学习经验,🏫多彩生活,精彩足球赛事⚽🔗我的CSDN: Kevin ’ s blog📂专栏收录:C预言 1. 文件的作用 …...
ADB 操作命令详解及用法大全
ADB 简介 ADB,全称 Android Debug Bridge,是 Google 提供的一款用于 Android 平台设备(包括真机和模拟器)调试、交互和管理的命令行工具。通过 ADB,开发者可以在电脑上对连接的 Android 设备执行一系列高级操作&#…...
指针数组。
指针数组 int c[5]{1,2,3,4,5};int *pc;printf("p:%d",p);return 0;输出:p:-756683712 说明p是地址值,*p就是取这个地址上的元素的值。所以printf(“*p:%d”,*p); 打印出来的是 *p:1 *pc,c是c[5]数组的首地址元素。 #include <iostream>…...

GitHub开源项目权限管理-使用账号和个人令牌访问
1.打开后台账号设置 2.找到左下角的Developer settings 3.找到Personal access tokens 的 Tokens(classic) 4.选择创建新证书 5.填写证书信息 6.点击生成证书,复制证书并且保存起来(血泪教训,证书只会在创建时显示一次,以后就再也…...

DevSecOps平台架构系列-亚马逊云AWS DevSecOps平台架构
目录 一、概述 二、AWS DevSecOps实施原则 2.1 尽早采用安全测试,加速问题反馈 2.2 优先考虑预防性安全控制 2.3 部署检测性安全控制时,确保有与之互补的响应性安全控制 2.4 安全自动化 2.5 总结 三、AWS DevSecOps关键组件 3.1 关键组件 3.2 关…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...