在使用 grpc-gateway 进行跨域设置时,可以使用以下方式:
- 在 grpc-gateway 的启动代码中添加 CORS 中间件
import (
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
)
func main() {
// 创建 gRPC server
grpcServer := ...
// 创建 HTTP mux
mux := runtime.NewServeMux()
// 注册 gRPC service 到 mux 中
err := myservice.RegisterMyServiceHandlerFromEndpoint(
context.Background(),
mux,
"localhost:50051",
[]grpc.DialOption{grpc.WithInsecure()},
)
if err != nil {
log.Fatalf("failed to register gateway: %v", err)
}
// 添加 CORS 中间件
headersOk := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
http.ListenAndServe(":8080", handlers.CORS(headersOk, originsOk, methodsOk)(mux))
}
- 使用 Nginx 等反向代理服务器进行跨域设置
在使用 Nginx 等反向代理服务器进行跨域设置时,需要在 Nginx 配置文件中添加如下内容:
location /my-service/ {
# 设置允许跨域的 origin,可以是单个或多个值,用空格隔开。
add_header 'Access-Control-Allow-Origin' '*';
# 允许浏览器发送的请求方法,可以是单个或多个值,用逗号隔开。
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# 允许浏览器发送的请求头,可以是单个或多个值,用逗号隔开。
add_header 'Access-Control-Allow-Headers' 'Authorization, X-Requested-With, Content-Type';
}
其中 /my-service/ 是 grpc-gateway 的反向代理服务地址。通过这种方式设置跨域时,需要注意将 grpc-gateway 的反向代理服务地址添加到 Nginx 配置文件中。
以上两种方式都可以实现 grpc-gateway 的跨域设置。具体选择哪种方式根据具体情况而定。




