From 46bf106316a3e2261b370789758322f1e19b4a2f Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Thu, 30 Nov 2023 15:49:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=BC=98=E5=8C=96=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BE=8B=E5=A4=96URL=E5=92=8C=E9=99=90=E5=88=B6URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http_page_optimization_base.go | 62 +++++++++++++++++++ .../http_page_optimization_config.go | 8 +-- .../http_page_optimization_css.go | 6 ++ .../http_page_optimization_html.go | 10 ++- .../http_page_optimization_javascript.go | 6 ++ 5 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 pkg/serverconfigs/http_page_optimization_base.go diff --git a/pkg/serverconfigs/http_page_optimization_base.go b/pkg/serverconfigs/http_page_optimization_base.go new file mode 100644 index 0000000..d649821 --- /dev/null +++ b/pkg/serverconfigs/http_page_optimization_base.go @@ -0,0 +1,62 @@ +// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package serverconfigs + +import ( + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" + "strings" +) + +type HTTPBaseOptimizationConfig struct { + OnlyURLPatterns []*shared.URLPattern `yaml:"onlyURLPatterns" json:"onlyURLPatterns"` // 仅限的URL + ExceptURLPatterns []*shared.URLPattern `yaml:"exceptURLPatterns" json:"exceptURLPatterns"` // 排除的URL +} + +func (this *HTTPBaseOptimizationConfig) Init() error { + // only url + for _, pattern := range this.OnlyURLPatterns { + err := pattern.Init() + if err != nil { + return err + } + } + + // except url + for _, pattern := range this.ExceptURLPatterns { + err := pattern.Init() + if err != nil { + return err + } + } + + return nil +} + +func (this *HTTPBaseOptimizationConfig) MatchURL(url string) bool { + // 去除问号 + var index = strings.Index(url, "?") + if index >= 0 { + url = url[:index] + } + + // except + if len(this.ExceptURLPatterns) > 0 { + for _, pattern := range this.ExceptURLPatterns { + if pattern.Match(url) { + return false + } + } + } + + // only + if len(this.OnlyURLPatterns) > 0 { + for _, pattern := range this.OnlyURLPatterns { + if pattern.Match(url) { + return true + } + } + return false + } + + return true +} diff --git a/pkg/serverconfigs/http_page_optimization_config.go b/pkg/serverconfigs/http_page_optimization_config.go index 77b2a95..6e87b3c 100644 --- a/pkg/serverconfigs/http_page_optimization_config.go +++ b/pkg/serverconfigs/http_page_optimization_config.go @@ -94,7 +94,7 @@ func (this *HTTPPageOptimizationConfig) CheckIsOn() bool { (this.CSS != nil && this.CSS.IsOn) } -func (this *HTTPPageOptimizationConfig) FilterResponse(resp *http.Response) error { +func (this *HTTPPageOptimizationConfig) FilterResponse(url string, resp *http.Response) error { if !this.isOn || this.minifyInstance == nil { return nil } @@ -113,15 +113,15 @@ func (this *HTTPPageOptimizationConfig) FilterResponse(resp *http.Response) erro var mimeType = "" switch contentType { case "text/html": - if this.HTML != nil && this.HTML.IsOn { + if this.HTML != nil && this.HTML.IsOn && this.HTML.MatchURL(url) { mimeType = HTTPPageOptimizationMimeTypeHTML } case "text/javascript", "application/javascript": - if this.Javascript != nil && this.Javascript.IsOn { + if this.Javascript != nil && this.Javascript.IsOn && this.Javascript.MatchURL(url) { mimeType = HTTPPageOptimizationMimeTypeJavascript } case "text/css": - if this.CSS != nil && this.CSS.IsOn { + if this.CSS != nil && this.CSS.IsOn && this.CSS.MatchURL(url) { mimeType = HTTPPageOptimizationMimeTypeCSS } default: diff --git a/pkg/serverconfigs/http_page_optimization_css.go b/pkg/serverconfigs/http_page_optimization_css.go index 4ef9b14..01d2339 100644 --- a/pkg/serverconfigs/http_page_optimization_css.go +++ b/pkg/serverconfigs/http_page_optimization_css.go @@ -5,6 +5,8 @@ package serverconfigs import "github.com/tdewolff/minify/v2/css" type HTTPCSSOptimizationConfig struct { + HTTPBaseOptimizationConfig + IsOn bool `yaml:"isOn" json:"isOn"` Precision int `yaml:"precision" json:"precision"` @@ -18,6 +20,10 @@ func NewHTTPCSSOptimizationConfig() *HTTPCSSOptimizationConfig { } func (this *HTTPCSSOptimizationConfig) Init() error { + err := this.HTTPBaseOptimizationConfig.Init() + if err != nil { + return err + } return nil } diff --git a/pkg/serverconfigs/http_page_optimization_html.go b/pkg/serverconfigs/http_page_optimization_html.go index 1cf6af9..5361cad 100644 --- a/pkg/serverconfigs/http_page_optimization_html.go +++ b/pkg/serverconfigs/http_page_optimization_html.go @@ -2,9 +2,13 @@ package serverconfigs -import "github.com/tdewolff/minify/v2/html" +import ( + "github.com/tdewolff/minify/v2/html" +) type HTTPHTMLOptimizationConfig struct { + HTTPBaseOptimizationConfig + IsOn bool `yaml:"isOn" json:"isOn"` KeepComments bool `yaml:"keepComments" json:"keepComments"` @@ -26,6 +30,10 @@ func NewHTTPHTMLOptimizationConfig() *HTTPHTMLOptimizationConfig { } func (this *HTTPHTMLOptimizationConfig) Init() error { + err := this.HTTPBaseOptimizationConfig.Init() + if err != nil { + return err + } return nil } diff --git a/pkg/serverconfigs/http_page_optimization_javascript.go b/pkg/serverconfigs/http_page_optimization_javascript.go index 2c5de5e..4e3ff31 100644 --- a/pkg/serverconfigs/http_page_optimization_javascript.go +++ b/pkg/serverconfigs/http_page_optimization_javascript.go @@ -5,6 +5,8 @@ package serverconfigs import "github.com/tdewolff/minify/v2/js" type HTTPJavascriptOptimizationConfig struct { + HTTPBaseOptimizationConfig + IsOn bool `yaml:"isOn" json:"isOn"` Precision int `yaml:"precision" json:"precision"` @@ -17,6 +19,10 @@ func NewHTTPJavascriptOptimizationConfig() *HTTPJavascriptOptimizationConfig { } func (this *HTTPJavascriptOptimizationConfig) Init() error { + err := this.HTTPBaseOptimizationConfig.Init() + if err != nil { + return err + } return nil }