diff --git a/plugins/wasm-go/Makefile b/plugins/wasm-go/Makefile index a81cbe0c9..15afc40dd 100644 --- a/plugins/wasm-go/Makefile +++ b/plugins/wasm-go/Makefile @@ -60,7 +60,7 @@ builder: @echo "image: ${BUILDER}" local-build: - GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o extensions/${PLUGIN_NAME}/main.wasm extensions/${PLUGIN_NAME}/main.go + cd extensions/${PLUGIN_NAME};GOOS=wasip1 GOARCH=wasm go build -buildmode=c-shared -o ./main.wasm ./ @echo "" @echo "wasm: extensions/${PLUGIN_NAME}/main.wasm" diff --git a/plugins/wasm-go/extensions/ai-agent/main.go b/plugins/wasm-go/extensions/ai-agent/main.go index b3cbad227..8eba41ea1 100644 --- a/plugins/wasm-go/extensions/ai-agent/main.go +++ b/plugins/wasm-go/extensions/ai-agent/main.go @@ -58,6 +58,7 @@ func parseConfig(gjson gjson.Result, c *PluginConfig, log log.Log) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config PluginConfig, log log.Log) types.Action { + ctx.DisableReroute() return types.ActionContinue } diff --git a/plugins/wasm-go/extensions/ai-cache/main.go b/plugins/wasm-go/extensions/ai-cache/main.go index 91a4eab79..e8b341126 100644 --- a/plugins/wasm-go/extensions/ai-cache/main.go +++ b/plugins/wasm-go/extensions/ai-cache/main.go @@ -58,6 +58,7 @@ func parseConfig(json gjson.Result, c *config.PluginConfig, log log.Log) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, c config.PluginConfig, log log.Log) types.Action { + ctx.DisableReroute() skipCache, _ := proxywasm.GetHttpRequestHeader(SKIP_CACHE_HEADER) if skipCache == "on" { ctx.SetContext(SKIP_CACHE_HEADER, struct{}{}) diff --git a/plugins/wasm-go/extensions/ai-history/main.go b/plugins/wasm-go/extensions/ai-history/main.go index cec2d2a0f..2d8e78b4e 100644 --- a/plugins/wasm-go/extensions/ai-history/main.go +++ b/plugins/wasm-go/extensions/ai-history/main.go @@ -170,6 +170,7 @@ func parseConfig(json gjson.Result, c *PluginConfig, log log.Log) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config PluginConfig, log log.Log) types.Action { + ctx.DisableReroute() contentType, _ := proxywasm.GetHttpRequestHeader("content-type") if !strings.Contains(contentType, "application/json") { log.Warnf("content is not json, can't process:%s", contentType) diff --git a/plugins/wasm-go/extensions/ai-image-reader/main.go b/plugins/wasm-go/extensions/ai-image-reader/main.go index dc1a45794..31ba21295 100644 --- a/plugins/wasm-go/extensions/ai-image-reader/main.go +++ b/plugins/wasm-go/extensions/ai-image-reader/main.go @@ -57,6 +57,7 @@ func parseConfig(json gjson.Result, config *Config) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config Config) types.Action { + ctx.DisableReroute() contentType, _ := proxywasm.GetHttpRequestHeader("content-type") if contentType == "" { return types.ActionContinue diff --git a/plugins/wasm-go/extensions/ai-intent/main.go b/plugins/wasm-go/extensions/ai-intent/main.go index e7bd806c5..9a3ae40ca 100644 --- a/plugins/wasm-go/extensions/ai-intent/main.go +++ b/plugins/wasm-go/extensions/ai-intent/main.go @@ -198,6 +198,7 @@ func parseConfig(json gjson.Result, c *PluginConfig, log log.Log) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config PluginConfig, log log.Log) types.Action { + ctx.DisableReroute() log.Debug("start onHttpRequestHeaders function.") log.Debug("end onHttpRequestHeaders function.") diff --git a/plugins/wasm-go/extensions/ai-json-resp/main.go b/plugins/wasm-go/extensions/ai-json-resp/main.go index 68837f157..516125281 100644 --- a/plugins/wasm-go/extensions/ai-json-resp/main.go +++ b/plugins/wasm-go/extensions/ai-json-resp/main.go @@ -449,6 +449,7 @@ func recursiveRefineJson(ctx wrapper.HttpContext, config PluginConfig, log log.L } func onHttpRequestHeaders(ctx wrapper.HttpContext, config PluginConfig, log log.Log) types.Action { + ctx.DisableReroute() if config.rejectStruct.RejectCode != HTTP_STATUS_OK { sendResponse(ctx, config, log, nil) return types.ActionPause diff --git a/plugins/wasm-go/extensions/ai-load-balancer/main.go b/plugins/wasm-go/extensions/ai-load-balancer/main.go index ddf85f9a1..0823523c1 100644 --- a/plugins/wasm-go/extensions/ai-load-balancer/main.go +++ b/plugins/wasm-go/extensions/ai-load-balancer/main.go @@ -64,6 +64,7 @@ func parseConfig(json gjson.Result, config *Config) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config Config) types.Action { + ctx.DisableReroute() return config.lb.HandleHttpRequestHeaders(ctx) } diff --git a/plugins/wasm-go/extensions/ai-prompt-decorator/main.go b/plugins/wasm-go/extensions/ai-prompt-decorator/main.go index 3be59e695..6299e864f 100644 --- a/plugins/wasm-go/extensions/ai-prompt-decorator/main.go +++ b/plugins/wasm-go/extensions/ai-prompt-decorator/main.go @@ -39,6 +39,7 @@ func parseConfig(jsonConfig gjson.Result, config *AIPromptDecoratorConfig, log l } func onHttpRequestHeaders(ctx wrapper.HttpContext, config AIPromptDecoratorConfig, log log.Log) types.Action { + ctx.DisableReroute() proxywasm.RemoveHttpRequestHeader("content-length") return types.ActionContinue } diff --git a/plugins/wasm-go/extensions/ai-prompt-template/main.go b/plugins/wasm-go/extensions/ai-prompt-template/main.go index 2c1cfb181..f697be616 100644 --- a/plugins/wasm-go/extensions/ai-prompt-template/main.go +++ b/plugins/wasm-go/extensions/ai-prompt-template/main.go @@ -36,6 +36,7 @@ func parseConfig(json gjson.Result, config *AIPromptTemplateConfig, log log.Log) } func onHttpRequestHeaders(ctx wrapper.HttpContext, config AIPromptTemplateConfig, log log.Log) types.Action { + ctx.DisableReroute() templateEnable, _ := proxywasm.GetHttpRequestHeader("template-enable") if templateEnable == "false" { ctx.DontReadRequestBody() diff --git a/plugins/wasm-go/extensions/ai-quota/main.go b/plugins/wasm-go/extensions/ai-quota/main.go index 1a1edcfc6..a76476524 100644 --- a/plugins/wasm-go/extensions/ai-quota/main.go +++ b/plugins/wasm-go/extensions/ai-quota/main.go @@ -16,7 +16,7 @@ import ( "github.com/higress-group/wasm-go/pkg/wrapper" "github.com/tidwall/gjson" "github.com/tidwall/resp" - + "github.com/alibaba/higress/plugins/wasm-go/extensions/ai-quota/util" ) @@ -131,6 +131,7 @@ func parseConfig(json gjson.Result, config *QuotaConfig) error { } func onHttpRequestHeaders(context wrapper.HttpContext, config QuotaConfig) types.Action { + context.DisableReroute() log.Debugf("onHttpRequestHeaders()") // get tokens consumer, err := proxywasm.GetHttpRequestHeader("x-mse-consumer") diff --git a/plugins/wasm-go/extensions/ai-rag/main.go b/plugins/wasm-go/extensions/ai-rag/main.go index b257de3ca..a824bc9d3 100644 --- a/plugins/wasm-go/extensions/ai-rag/main.go +++ b/plugins/wasm-go/extensions/ai-rag/main.go @@ -95,6 +95,7 @@ func parseConfig(json gjson.Result, config *AIRagConfig, log log.Log) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config AIRagConfig, log log.Log) types.Action { + ctx.DisableReroute() proxywasm.RemoveHttpRequestHeader("content-length") return types.ActionContinue } diff --git a/plugins/wasm-go/extensions/ai-search/main.go b/plugins/wasm-go/extensions/ai-search/main.go index 04cf24963..b8b730d05 100644 --- a/plugins/wasm-go/extensions/ai-search/main.go +++ b/plugins/wasm-go/extensions/ai-search/main.go @@ -278,6 +278,7 @@ func parseConfig(json gjson.Result, config *Config) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config Config) types.Action { + ctx.DisableReroute() contentType, _ := proxywasm.GetHttpRequestHeader("content-type") // The request does not have a body. if contentType == "" { diff --git a/plugins/wasm-go/extensions/ai-security-guard/main.go b/plugins/wasm-go/extensions/ai-security-guard/main.go index b7bd234bb..8c82d9801 100644 --- a/plugins/wasm-go/extensions/ai-security-guard/main.go +++ b/plugins/wasm-go/extensions/ai-security-guard/main.go @@ -254,6 +254,7 @@ func generateRandomID() string { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config AISecurityConfig, log log.Log) types.Action { + ctx.DisableReroute() if !config.checkRequest { log.Debugf("request checking is disabled") ctx.DontReadRequestBody() diff --git a/plugins/wasm-go/extensions/ai-statistics/main.go b/plugins/wasm-go/extensions/ai-statistics/main.go index db097d00b..b44e1ca2f 100644 --- a/plugins/wasm-go/extensions/ai-statistics/main.go +++ b/plugins/wasm-go/extensions/ai-statistics/main.go @@ -175,6 +175,7 @@ func parseConfig(configJson gjson.Result, config *AIStatisticsConfig) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config AIStatisticsConfig) types.Action { + ctx.DisableReroute() route, _ := getRouteName() cluster, _ := getClusterName() api, apiError := getAPIName() @@ -191,11 +192,8 @@ func onHttpRequestHeaders(ctx wrapper.HttpContext, config AIStatisticsConfig) ty if consumer, _ := proxywasm.GetHttpRequestHeader(ConsumerKey); consumer != "" { ctx.SetContext(ConsumerKey, consumer) } - hasRequestBody := wrapper.HasRequestBody() - if hasRequestBody { - _ = proxywasm.RemoveHttpRequestHeader("Content-Length") - ctx.SetRequestBodyBufferLimit(defaultMaxBodyBytes) - } + + ctx.SetRequestBodyBufferLimit(defaultMaxBodyBytes) // Set user defined log & span attributes which type is fixed_value setAttributeBySource(ctx, config, FixedValue, nil) diff --git a/plugins/wasm-go/extensions/ai-token-ratelimit/main.go b/plugins/wasm-go/extensions/ai-token-ratelimit/main.go index f3c012f6c..1f9a610b0 100644 --- a/plugins/wasm-go/extensions/ai-token-ratelimit/main.go +++ b/plugins/wasm-go/extensions/ai-token-ratelimit/main.go @@ -99,6 +99,7 @@ func parseConfig(json gjson.Result, config *ClusterKeyRateLimitConfig) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config ClusterKeyRateLimitConfig) types.Action { + ctx.DisableReroute() // 判断是否命中限流规则 val, ruleItem, configItem := checkRequestAgainstLimitRule(ctx, config.ruleItems) if ruleItem == nil || configItem == nil { diff --git a/plugins/wasm-go/extensions/ai-transformer/main.go b/plugins/wasm-go/extensions/ai-transformer/main.go index 5294f4e0f..7a541b3be 100644 --- a/plugins/wasm-go/extensions/ai-transformer/main.go +++ b/plugins/wasm-go/extensions/ai-transformer/main.go @@ -93,6 +93,7 @@ func extraceHttpFrame(frame string) ([][2]string, []byte, error) { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config AITransformerConfig, log log.Log) types.Action { + ctx.DisableReroute() log.Info("onHttpRequestHeaders") if !config.requestTransformEnable || config.requestTransformPrompt == "" { ctx.DontReadRequestBody() diff --git a/plugins/wasm-go/extensions/cluster-key-rate-limit/main.go b/plugins/wasm-go/extensions/cluster-key-rate-limit/main.go index 5c84b9b94..ac0913abb 100644 --- a/plugins/wasm-go/extensions/cluster-key-rate-limit/main.go +++ b/plugins/wasm-go/extensions/cluster-key-rate-limit/main.go @@ -87,6 +87,7 @@ func parseConfig(json gjson.Result, cfg *config.ClusterKeyRateLimitConfig) error } func onHttpRequestHeaders(ctx wrapper.HttpContext, config config.ClusterKeyRateLimitConfig) types.Action { + ctx.DisableReroute() limitKey, count, timeWindow := "", int64(0), int64(0) if config.GlobalThreshold != nil { diff --git a/plugins/wasm-go/extensions/cors/main.go b/plugins/wasm-go/extensions/cors/main.go index 54f57e9ab..eccd11391 100644 --- a/plugins/wasm-go/extensions/cors/main.go +++ b/plugins/wasm-go/extensions/cors/main.go @@ -75,6 +75,7 @@ func parseConfig(json gjson.Result, corsConfig *config.CorsConfig, log log.Log) } func onHttpRequestHeaders(ctx wrapper.HttpContext, corsConfig config.CorsConfig, log log.Log) types.Action { + ctx.DisableReroute() log.Debug("onHttpRequestHeaders()") requestUrl, _ := proxywasm.GetHttpRequestHeader(":path") method, _ := proxywasm.GetHttpRequestHeader(":method") diff --git a/plugins/wasm-go/extensions/de-graphql/main.go b/plugins/wasm-go/extensions/de-graphql/main.go index 818023104..beee3e81b 100644 --- a/plugins/wasm-go/extensions/de-graphql/main.go +++ b/plugins/wasm-go/extensions/de-graphql/main.go @@ -61,6 +61,7 @@ func parseConfig(json gjson.Result, config *config.DeGraphQLConfig, log log.Log) } func onHttpRequestHeaders(ctx wrapper.HttpContext, config config.DeGraphQLConfig, log log.Log) types.Action { + ctx.DisableReroute() log.Debug("onHttpRequestHeaders()") log.Debugf("schema:%s host:%s path:%s", ctx.Scheme(), ctx.Host(), ctx.Path()) requestUrl, _ := proxywasm.GetHttpRequestHeader(":path") diff --git a/plugins/wasm-go/extensions/geo-ip/main.go b/plugins/wasm-go/extensions/geo-ip/main.go index 81f510d12..a6c3fb3d0 100644 --- a/plugins/wasm-go/extensions/geo-ip/main.go +++ b/plugins/wasm-go/extensions/geo-ip/main.go @@ -204,6 +204,7 @@ func onHttpRequestHeaders(ctx wrapper.HttpContext, config GeoIpConfig, log log.L s string err error ) + ctx.DisableReroute() if config.IPSourceType == HeaderSourceType { s, err = proxywasm.GetHttpRequestHeader(config.IPHeaderName) if err == nil { diff --git a/plugins/wasm-go/extensions/oidc/main.go b/plugins/wasm-go/extensions/oidc/main.go index 456e2246f..b638e86b8 100644 --- a/plugins/wasm-go/extensions/oidc/main.go +++ b/plugins/wasm-go/extensions/oidc/main.go @@ -59,6 +59,7 @@ func parseConfig(json gjson.Result, config *PluginConfig, log log.Log) error { } func onHttpRequestHeaders(ctx wrapper.HttpContext, config PluginConfig, log log.Log) types.Action { + ctx.DisableReroute() config.oidcHandler.SetContext(ctx) req := getHttpRequest() rw := util.NewRecorder() diff --git a/plugins/wasm-go/go.mod b/plugins/wasm-go/go.mod index 240490996..686f6e79b 100644 --- a/plugins/wasm-go/go.mod +++ b/plugins/wasm-go/go.mod @@ -15,7 +15,6 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/higress-group/wasm-go v1.0.2-0.20250715122353-fca24464ab2d // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect diff --git a/plugins/wasm-go/go.sum b/plugins/wasm-go/go.sum index d01283749..7952984e3 100644 --- a/plugins/wasm-go/go.sum +++ b/plugins/wasm-go/go.sum @@ -1,24 +1,20 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/higress-group/proxy-wasm-go-sdk v0.0.0-20250611100342-5654e89a7a80 h1:xqmtTZI0JQ2O+Lg9/CE6c+Tw9KD6FnvWw8EpLVuuvfg= github.com/higress-group/proxy-wasm-go-sdk v0.0.0-20250611100342-5654e89a7a80/go.mod h1:tRI2LfMudSkKHhyv1uex3BWzcice2s/l8Ah8axporfA= -github.com/higress-group/wasm-go v1.0.2-0.20250715122353-fca24464ab2d h1:abvhxCCNJgQij0IvRvuLnudjAPXwfuv2+d9WZwkACNQ= -github.com/higress-group/wasm-go v1.0.2-0.20250715122353-fca24464ab2d/go.mod h1:9k7L730huS/q4V5iH9WLDgf5ZUHEtfhM/uXcegKDG/M= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94= -github.com/tidwall/gjson v1.17.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/resp v0.1.1 h1:Ly20wkhqKTmDUPlyM1S7pWo5kk0tDu8OoC/vFArXmwE= github.com/tidwall/resp v0.1.1/go.mod h1:3/FrruOBAxPTPtundW0VXgmsQ4ZBA0Aw714lVYgwFa0=