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。