【字节青训营-9】:初探字节微服务框架 Hertz 基础使用及进阶(下)

在这里插入图片描述

本文目录

  • 一、Hertz中间件Recovery
  • 二、Hertz中间件跨资源共享
  • 三、Hertz 响应
  • 四、Hertz请求
  • 五、Hertz中间件Session

一、Hertz中间件Recovery

Recovery中间件是Hertz框架预置的中间件,使用server.Default()可以默认注册该中间件,为Hertz框架提供panic回复的功能。

如果我们没有使用Default(),可以通过下面的方式进行注册:

h := server.New()
h.Use(recovery.Recovery())

在 panic 发生之后,Recover 中间件会默认打印出 panicRecovery 中间件会恢复 Hertz 框架运行中的任何panic的时间、内容和堆栈信息,同时通过 *app.Requestcontext 将返回响应的状态码设置成 500。

这也是处理Web框架异常的一种手段。

可以通过WithRecoveryHandler()函数来定义出现panic后处理的函数。示例如下。

在这里插入图片描述

配合Use使用中间件的示例代码如下。
在这里插入图片描述

二、Hertz中间件跨资源共享

跨源资源共享(CORS)机制允许服务器标识除了它自己的其它 origin,使得浏览器可以访问加载这些资源; 该机制也用来检查服务器是否允许浏览器发送真实的请求,通过浏览器发送"预检"请求实现,在预检请求头部中有HTTP 方法和真实请求会用到的头。

比方说前后端分离。前后端部署的域名都不一样,所以需要设置cors进行跨域。

hertz 提供 cors 跨域中间件的实现 ,这里的实现参考了 gin 的 cors。

通过go get github.com/hertz-contrib/cors就可以导入需要的cors包。
然后在config里面配置源、方法、头等,还能设置最大的缓存时间。

在这里插入图片描述
AllowAllOrigins配置为True的时候,允许任何来自任意originn的客户端跨域访问服务端资源。同时,AllowOriginFuncAllowOrigins不可以使用,会冲突。

AllowOrigins就是一个切片列表,允许某些地址发起请求。比如:

在这里插入图片描述

三、Hertz 响应

Header响应设置:

在这里插入图片描述

  • 设置Content-Type
func (ctx *RequestContext) SetContentType (contentType String)

在这里插入图片描述

  • 通过[]byte方式设置Content-Type
func (ctx *RequestContext) SetContentType (contentType []byte)

在这里插入图片描述

  • 设置状态码
func (ctx *RequestContext) SetStatusCode(statusCode int)

在这里插入图片描述
未找到就是404,通过下面NotFound()进行设置。
在这里插入图片描述

  • 设置重定向
func ( ctx * RequestContext) Redirect(statusCode int, uri []byte)

在这里插入图片描述

  • 设置cookie

在这里插入图片描述

  • 渲染

支持对JSON(前后端分离)、HTML(模版)、Protobuf(微服务)等渲染,也就是输出的类型。

在这里插入图片描述

  • Body

输出的内容可是流式、string、write等。

在这里插入图片描述
如下面的代码是进行流式样例。

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

  • 添加File文件

在这里插入图片描述

四、Hertz请求

  • URI

在这里插入图片描述

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

五、Hertz中间件Session

Session就是会话连接。

下面的代码就是使用了 sessions 来存储用户会话数据。服务器监听在 8000 端口,定义了一个 /incr 路由处理函数,该函数使用一个名为 “mysession” 的 session 来跟踪访问次数。每次访问 /incr 路径时,服务器都会从 session 中获取一个名为 “count” 的值,如果该值存在,则将其转换为整数并递增,然后将更新后的值存回 session,最后向客户端返回新的计数值。

在代码中,首先创建了一个 Web 服务器实例,并为其指定监听端口为 8000。然后创建了一个 cookie 存储实例,用于加密和安全地存储 session 数据。通过 h.Use(sessions.New(“mysession”, store)) 将 session 中间件添加到服务器处理链中。在 /incr 路由的处理函数中,通过 sessions.Default© 获取当前请求的 session 实例,接着获取并更新计数器值,并将更新后的计数器值保存到 session 中。最后,使用 c.JSON 向客户端返回状态码 200 和一个包含计数值的 JSON 响应。服务器通过调用 h.Spin() 方法开始监听并处理请求。

store := cookie.NewStore([]byte(“secret”)) 中,“secret” 是一个字符串,它被用作生成 cookie 的安全密钥。这个密钥用于在服务端对 cookie 进行加密和签名,以确保 cookie 的内容在客户端和服务器之间传输时不会被篡改,并且只有服务器能够读取和修改 cookie 的内容。

当创建一个新的 cookie.Store 实例时,提供一个 secret 密钥是非常重要的,因为它增强了会话管理的安全性。如果 secret 密钥不够安全(例如,如果它太短或者容易被猜到),那么攻击者可能会尝试对 cookie 进行攻击,比如进行会话劫持。

ookie.NewStore 函数接受一个字节切片作为参数,因此 “secret” 字符串被转换为字节切片 []byte(“secret”) 传递给该函数。这个 secret 密钥在服务器的整个生命周期中应该保持不变,以便能够正确地验证和读取之前设置的 cooki
在这里插入图片描述
session可以用在用户处,也就是当用户登录后,保存了session信息,可以在每个界面都获取购物车信息。

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

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

相关文章

因果推断与机器学习—用机器学习解决因果推断问题

Judea Pearl 将当前备受瞩目的机器学习研究戏谑地称为“仅限于曲线拟合”,然而,曲线拟合的实现绝非易事。机器学习模型在图像识别、语音识别、自然语言处理、蛋白质分子结构预测以及搜索推荐等多个领域均展现出显著的应用效果。 在因果推断任务中,在完成因果效应识别之后,需…

软件设计模式

目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…

Linux 零拷贝技术

一、传统做法,经历“四次拷贝” 数据 1.读取到内核缓冲区 2.拷贝到用户缓冲区 3.写入到内核缓冲区 4.拷贝到网卡 使用 DMA,减少2次拷贝,还剩2次拷贝 DMA 负责硬盘到内核缓冲区和内核到网卡的传输。 CPU 仍需处理内核和用户缓冲区之间的数据…

【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

利用Vue和javascript分别编写一个“Hello World”的定时更新

目录 一、利用Vue编写一个“Hello World”的定时更新(1)vue编码在Html文件中(2)vue编码在js文件中 二、利用javascript编写一个“Hello World”的定时更新 一、利用Vue编写一个“Hello World”的定时更新 (1&#xff…

蓝桥杯python基础算法(2-1)——排序

目录 一、排序 二、例题 P3225——宝藏排序Ⅰ 三、各种排序比较 四、例题 P3226——宝藏排序Ⅱ 一、排序 (一)冒泡排序 基本思想:比较相邻的元素,如果顺序错误就把它们交换过来。 (二)选择排序 基本思想…

洛谷 P4552 [Poetize6] IncDec Sequence C语言

P4552 [Poetize6] IncDec Sequence - 洛谷 | 计算机科学教育新生态 题目描述 给定一个长度为 n 的数列 a1​,a2​,…,an​,每次可以选择一个区间 [l,r],使这个区间内的数都加 1 或者都减 1。 请问至少需要多少次操作才能使数列中的所有数都一样&#…

Vue Dom截图插件,截图转Base64 html2canvas

安装插件 npm install html2canvas --save插件使用 <template><div style"padding: 10px;"><div ref"imageTofile" class"box">发生什么事了</div><button click"toImage" style"margin: 10px;&quo…

88.[4]攻防世界 web php_rce

之前做过&#xff0c;回顾&#xff08;看了眼之前的wp,跟没做过一样&#xff09; 属于远程命令执行漏洞 在 PHP 里&#xff0c;system()、exec()、shell_exec()、反引号&#xff08;&#xff09;等都可用于执行系统命令。 直接访问index.php没效果 index.php?sindex/think\a…

数据结构-堆和PriorityQueue

1.堆&#xff08;Heap&#xff09; 1.1堆的概念 堆是一种非常重要的数据结构&#xff0c;通常被实现为一种特殊的完全二叉树 如果有一个关键码的集合K{k0,k1,k2,...,kn-1}&#xff0c;把它所有的元素按照完全二叉树的顺序存储在一个一维数组中&#xff0c;如果满足ki<k2i…

oracle 基础语法复习记录

Oracle SQL基础 因工作需要sql能力&#xff0c;需要重新把sql这块知识重新盘活&#xff0c;特此记录学习过程。 希望有新的发现。加油&#xff01;20250205 学习范围 学习SQL基础语法 掌握SELECT、INSERT、UPDATE、DELETE等基本操作。 熟悉WHERE、GROUP BY、ORDER BY、HAVIN…

【Rust自学】20.2. 最后的项目:多线程Web服务器

说句题外话&#xff0c;这篇文章非常要求Rust的各方面知识&#xff0c;最好看一下我的【Rust自学】专栏的所有内容。这篇文章也是整个专栏最长&#xff08;4762字&#xff09;的文章&#xff0c;需要多次阅读消化&#xff0c;最好点个收藏&#xff0c;免得刷不到了。 喜欢的话…

国产编辑器EverEdit - 工具栏说明

1 工具栏 1.1 应用场景 当用户想显示/隐藏界面的标签栏、工具栏、状态栏、主菜单等界面元素时&#xff0c;可以通过EverEdit的菜单选项进行设置。 1.2 使用方法 选择菜单查看 -> 工具栏&#xff0c;在工具栏的子菜单中选择勾选或去掉勾选对应的选项。 标签栏&#xff1…

虚幻UE5手机安卓Android Studio开发设置2025

一、下载Android Studio历史版本 步骤1&#xff1a;虚幻4.27、5.0、5.1、5.2官方要求Andrd Studio 4.0版本&#xff1b; 5.3、5.4、5.5官方要求的版本为Android Studio Flamingo | 2022.2.1 Patch 2 May 24, 2023 虚幻官网查看对应Andrd Studiob下载版本&#xff1a; https:/…

VLAN 基础 | 不同 VLAN 间通信实验

注&#xff1a;本文为 “ Vlan 间通信” 相关文章合辑。 英文引文&#xff0c;机翻未校。 图片清晰度限于原文图源状态。 未整理去重。 How to Establish Communications between VLANs? 如何在 VLAN 之间建立通信&#xff1f; Posted on November 20, 2015 by RouterSwi…

bat脚本实现自动化漏洞挖掘

bat脚本 BAT脚本是一种批处理文件&#xff0c;可以在Windows操作系统中自动执行一系列命令。它们可以简化许多日常任务&#xff0c;如文件操作、系统配置等。 bat脚本执行命令 echo off#下面写要执行的命令 httpx 自动存活探测 echo off httpx.exe -l url.txt -o 0.txt nuc…

堆的实现——堆的应用(堆排序)

文章目录 1.堆的实现2.堆的应用--堆排序 大家在学堆的时候&#xff0c;需要有二叉树的基础知识&#xff0c;大家可以看我的二叉树文章&#xff1a;二叉树 1.堆的实现 如果有⼀个关键码的集合 K {k0 , k1 , k2 , …&#xff0c;kn−1 } &#xff0c;把它的所有元素按完全⼆叉树…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号&#xff0c;直接搜索引擎搜索即可得到&#xff0c;这就不用多说了&#xff0c;但是这里的手机号可以任意输入&#xff0c;只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

FRP通过公网IP实现内网穿透

FRP通过公网IP实现内网穿透 一、简介二、安装服务端1、下载2、安装FRP3、使用 systemd 命令管理 frps 服务4、设置 frps 开机自启动 三、安装客户端1、下载2、安装FRP3、使用 systemd 命令管理 frpc 服务4、设置 frpc 开机自启动 四、访问仪表盘 一、简介 frp 是一款高性能的反…

K8S学习笔记-------1.安装部署K8S集群环境

1.修改为root权限 #sudo su 2.修改主机名 #hostnamectl set-hostname k8s-master01 3.查看网络地址 sudo nano /etc/netplan/01-netcfg.yaml4.使网络配置修改生效 sudo netplan apply5.修改UUID&#xff08;某些虚拟机系统&#xff0c;需要设置才能生成UUID&#xff09;#…