前言
字节跳动开源框架Hertz,可能存在的CORS的跨域问题
正文
文档信息
- 文档中描述
| AllowAllOrigins | 用于设置允许来自任意 origin 的客户端访问服务端资源,默认为false
,所以我们在仅仅设置AllowAllOrigins = true的时候应该不会出现跨域问题。 实际上仅仅配置这一项目也会产生跨域的问题,上周我提过一个issue,cloudwego已经完成了更新,下面是我但是处理的方案。
解决方法
思考Hertz和gin的相似之处,我将之前用于gin的跨域请求的代码放过来,跨域是没有产生的,因此处理Hertz的CORS可以这么进行。
package main
import (
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/hertz-contrib/cors"
"go.uber.org/zap"
"qiniu/cmd/api/db"
"qiniu/cmd/api/router"
"qiniu/cmd/api/rpc"
"time"
)
// biz/router/middleware/cors.go
func main() {
h := server.New(
server.WithHostPorts("0.0.0.0:8080"),
server.WithHandleMethodNotAllowed(true),
)
h.Use(cors.New(cors.Config{
//准许跨域请求网站,多个使用,分开,限制使用*
AllowOrigins: []string{
"*"},
//准许使用的请求方式
AllowMethods: []string{
"PUT", "PATCH", "POST", "GET", "DELETE"},
//准许使用的请求表头
AllowHeaders: []string{
"Origin", "Authorization", "Content-Type"},
//显示的请求表头
ExposeHeaders: []string{
"Content-Type"},
//凭证共享,确定共享
AllowCredentials: true,
//容许跨域的原点网站,可以直接return true就万事大吉了
AllowOriginFunc: func(origin string) bool {
return true
},
//超时时间设定
MaxAge: 24 * time.Hour,
}))
logger, _ := zap.NewDevelopment()
db.Init() //redis
zap.ReplaceGlobals(logger) //日志
rpc.InitRPC() //rpc
router.Init(h) //路由
h.Spin()
}
更多详细的信息请见:跨源资源共享 | CloudWeGo