diff --git a/CHANGE.md b/CHANGE.md index 0031f07f4..2690410fe 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -1,6 +1,39 @@ # Release Notes --- +## 1.0.0 + +### New Features +- [fail inject](https://github.com/apache/dubbo-go-pixiu/pull/571) +- [add support for header based route](https://github.com/apache/dubbo-go-pixiu/pull/565) +- [Add Maglev hashing LB algorithm](https://github.com/apache/dubbo-go-pixiu/pull/554) +- [triple proxy support import protosets](https://github.com/apache/dubbo-go-pixiu/pull/548) +- [Add GracefulShutdown Signal For Windows ](https://github.com/apache/dubbo-go-pixiu/pull/522) +- [Tracing support dubbo invoke](https://github.com/apache/dubbo-go-pixiu/pull/559) + +### Enhancement +- [refactor prometheus metric](https://github.com/apache/dubbo-go-pixiu/pull/573) +- [remove unused pkg imports](https://github.com/apache/dubbo-go-pixiu/pull/574) +- [chore: unnecessary use of fmt.Sprintf](https://github.com/apache/dubbo-go-pixiu/pull/575) +- [chore:use wasm filter build tags add wasm](https://github.com/apache/dubbo-go-pixiu/pull/567) +- [docs:format and change samples link](https://github.com/apache/dubbo-go-pixiu/pull/556) +- [revert gatewayCmd to Run dubbo go pixiu](https://github.com/apache/dubbo-go-pixiu/pull/557) +- [full import format](https://github.com/apache/dubbo-go-pixiu/pull/527) +- [upgrade hessian2 to v1.11.3](https://github.com/apache/dubbo-go-pixiu/pull/516) + +### Bugfixes +- [register hashing and array out of bounds and init hashing](https://github.com/apache/dubbo-go-pixiu/pull/530) +- [optimize timeout statusCode](https://github.com/apache/dubbo-go-pixiu/pull/521) +- [optimizing Metric Implementation](https://github.com/apache/dubbo-go-pixiu/pull/528) +- [add and modify nacos config arguments](https://github.com/apache/dubbo-go-pixiu/pull/524) +- [fix NPE when filter config is nil](https://github.com/apache/dubbo-go-pixiu/pull/517) +- [use wasmer-go v1.0.4 which is compatible with mac arm](https://github.com/apache/dubbo-go-pixiu/pull/515) +- [fix sample url using github.com/apache/dubbo-go-pixiu-samples](https://github.com/apache/dubbo-go-pixiu/pull/506) +- [traffic filter fix weight strategy and error handle within Apply method](https://github.com/apache/dubbo-go-pixiu/pull/507) +- [httpfilter loadbalancer does not work when it has spaces between multiple urls](https://github.com/apache/dubbo-go-pixiu/pull/513) + +Milestone: [https://github.com/apache/dubbo-go-pixiu/milestone/8](https://github.com/apache/dubbo-go-pixiu/milestone/8) + ## 0.6.0 ### New Features @@ -17,7 +50,7 @@ ### Enhancement - [Remove "Types" on Http to dubbo proxy](https://github.com/apache/dubbo-go-pixiu/pull/456) - [ASoC 2002: Optimization of Pixiu timeout feature ](https://github.com/apache/dubbo-go-pixiu/pull/475) -- +- ### Bugfixes @@ -110,7 +143,7 @@ Milestone: [https://github.com/apache/dubbo-go-pixiu/milestone/6](https://github - [Fix filterManager get filters with random order](https://github.com/apache/dubbo-go-pixiu/pull/264) - [Fix nil issue for timeout filter](https://github.com/apache/dubbo-go-pixiu/pull/278) -Milestone: [https://github.com/apache/dubbo-go-pixiu/milestone/5](https://github.com/apache/dubbo-go-pixiu/milestone/5) +Milestone: [https://github.com/apache/dubbo-go-pixiu/milestone/5](https://github.com/apache/dubbo-go-pixiu/milestone/5) ## 0.3.0 @@ -120,25 +153,25 @@ Milestone: [https://github.com/apache/dubbo-go-pixiu/milestone/5](https://github - [add integrate test](https://github.com/apache/dubbo-go-pixiu/pull/183) - [handle rate limit config update event](https://github.com/apache/dubbo-go-pixiu/pull/196) - [add otel metric export to prometheus in pixiu](https://github.com/apache/dubbo-go-pixiu/pull/204) -- [make Pixiu Admin config management finer-grained](https://github.com/apache/dubbo-go-pixiu/pull/171) - +- [make Pixiu Admin config management finer-grained](https://github.com/apache/dubbo-go-pixiu/pull/171) + ### Enhancement - [update samples/admin](https://github.com/apache/dubbo-go-pixiu/pull/208) - [update ratelimit samples](https://github.com/apache/dubbo-go-pixiu/pull/206) - [make router case sensitive](https://github.com/apache/dubbo-go-pixiu/pull/209) - [add more test case](https://github.com/apache/dubbo-go-pixiu/pull/203) - [Enrich filter test case](https://github.com/apache/dubbo-go-pixiu/pull/202) -- [Enrich response.go's test case](https://github.com/apache/dubbo-go-pixiu/pull/197) - +- [Enrich response.go's test case](https://github.com/apache/dubbo-go-pixiu/pull/197) + ### Bugfixes - [Fix CI check status not match required](https://github.com/apache/dubbo-go-pixiu/pull/199) - [Fix timeout config overridden](https://github.com/apache/dubbo-go-pixiu/pull/190) - [Fix/quickstart](https://github.com/apache/dubbo-go-pixiu/pull/191) - [FixBug: can't delete node by path](https://github.com/apache/dubbo-go-pixiu/pull/201) - [Fix flow chart](https://github.com/apache/dubbo-go-pixiu/pull/205) -- [Fix reviewdog](https://github.com/apache/dubbo-go-pixiu/pull/195) - -Milestone: [https://github.com/apache/dubbo-go-pixiu/milestone/4](https://github.com/apache/dubbo-go-pixiu/milestone/4) +- [Fix reviewdog](https://github.com/apache/dubbo-go-pixiu/pull/195) + +Milestone: [https://github.com/apache/dubbo-go-pixiu/milestone/4](https://github.com/apache/dubbo-go-pixiu/milestone/4) ## 0.2.1 diff --git a/pixiu/pkg/common/constant/http.go b/pixiu/pkg/common/constant/http.go index 69fa073fb..1a17040c3 100644 --- a/pixiu/pkg/common/constant/http.go +++ b/pixiu/pkg/common/constant/http.go @@ -21,6 +21,7 @@ const ( HeaderKeyContextType = "Content-Type" HeaderKeyAccessControlAllowOrigin = "Access-Control-Allow-Origin" + HeaderKeyAccessControlAllowHeaders = "Access-Control-Allow-Headers" HeaderKeyAccessControlExposeHeaders = "Access-Control-Expose-Headers" HeaderKeyAccessControlAllowMethods = "Access-Control-Allow-Methods" HeaderKeyAccessControlMaxAge = "Access-Control-Max-Age" @@ -48,10 +49,11 @@ const ( ) const ( - Get = "GET" - Put = "PUT" - Post = "POST" - Delete = "DELETE" + Get = "GET" + Put = "PUT" + Post = "POST" + Delete = "DELETE" + Options = "OPTIONS" ) const ( diff --git a/pixiu/pkg/common/router/router.go b/pixiu/pkg/common/router/router.go index c807d3bd7..d8cbc37d5 100644 --- a/pixiu/pkg/common/router/router.go +++ b/pixiu/pkg/common/router/router.go @@ -137,7 +137,7 @@ func (rm *RouterCoordinator) OnAddRouter(r *model.Router) { rm.rw.Lock() defer rm.rw.Unlock() if r.Match.Methods == nil { - r.Match.Methods = []string{constant.Get, constant.Put, constant.Delete, constant.Post} + r.Match.Methods = []string{constant.Get, constant.Put, constant.Delete, constant.Post, constant.Options} } isPrefix := r.Match.Prefix != "" for _, method := range r.Match.Methods { diff --git a/pixiu/pkg/filter/cors/cors.go b/pixiu/pkg/filter/cors/cors.go index 4269c7565..b76b87159 100644 --- a/pixiu/pkg/filter/cors/cors.go +++ b/pixiu/pkg/filter/cors/cors.go @@ -25,6 +25,7 @@ import ( "github.com/apache/dubbo-go-pixiu/pixiu/pkg/common/constant" "github.com/apache/dubbo-go-pixiu/pixiu/pkg/common/extension/filter" "github.com/apache/dubbo-go-pixiu/pixiu/pkg/context/http" + "github.com/apache/dubbo-go-pixiu/pkg/http/headers" ) const ( @@ -79,41 +80,50 @@ func (factory *FilterFactory) PrepareFilterChain(ctx *http.HttpContext, chain fi } func (f *Filter) Decode(ctx *http.HttpContext) filter.FilterStatus { - f.handleCors(ctx) - return filter.Continue -} - -func (f *Filter) handleCors(ctx *http.HttpContext) { + writer := ctx.Writer c := f.cfg if c == nil { - return + return filter.Continue + } + if ctx.GetHeader(headers.Origin) == "" { + // not a cors request + return filter.Continue } domains := c.AllowOrigin if len(domains) != 0 { for _, domain := range domains { - if ctx.Request.Host == domain || ctx.Request.URL.Host == domain || - ctx.GetHeader("Host") == domain || ctx.GetHeader("host") == domain { - ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlAllowOrigin, domain) + if domain == "*" || ctx.GetHeader("Origin") == domain { + writer.Header().Add(constant.HeaderKeyAccessControlAllowOrigin, domain) + continue } } } if c.AllowHeaders != "" { - ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlExposeHeaders, c.AllowHeaders) + writer.Header().Add(constant.HeaderKeyAccessControlAllowHeaders, c.AllowHeaders) + } + + if c.ExposeHeaders != "" { + writer.Header().Add(constant.HeaderKeyAccessControlExposeHeaders, c.ExposeHeaders) } if c.AllowMethods != "" { - ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlAllowMethods, c.AllowMethods) + writer.Header().Add(constant.HeaderKeyAccessControlAllowMethods, c.AllowMethods) } if c.MaxAge != "" { - ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlMaxAge, c.MaxAge) + writer.Header().Add(constant.HeaderKeyAccessControlMaxAge, c.MaxAge) } if c.AllowCredentials { - ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlAllowCredentials, "true") + writer.Header().Add(constant.HeaderKeyAccessControlAllowCredentials, "true") } + if ctx.Request.Method == stdHttp.MethodOptions { + ctx.SendLocalReply(stdHttp.StatusOK, nil) + return filter.Stop + } + return filter.Continue } func (factory *FilterFactory) Apply() error {