kratos跨域支持

发布时间 2023-07-13 20:13:34作者: 若-飞

kratos 跨域支持:

package server

import (
	kratosHttp "github.com/go-kratos/kratos/v2/transport/http"
	"github.com/gorilla/handlers"
)

// NewHTTPServer new an HTTP server.
func NewHTTPServer(opts ...kratosHttp.ServerOption) *kratosHttp.Server {

	opts = append(
		opts,
		kratosHttp.ErrorEncoder(ErrorEncoder),
		kratosHttp.Filter(
			//跨域处理
			handlers.CORS(
				handlers.AllowedHeaders([]string{"Content-Type", "x-token"}),
				handlers.AllowedMethods([]string{"GET", "POST", "PUT", "HEAD", "OPTIONS", "DELETE"}),
				handlers.AllowedOrigins([]string{"*"}))),
	)
	srv := kratosHttp.NewServer(opts...)
	HandlerSwagger(srv)
	return srv
}

这里指定允许跨域的信息:

headres为:Context-Type 和x-token

method为:"GET", "POST", "PUT", "HEAD", "OPTIONS", "DELETE"

origin不限:安全考虑的话,还是需要设置上

 

如果客户端带的请求头超过了服务器的设置,将会报错403:

 

以下是成功的options预检请求:

服务器回答允许这2个header。