package serverconfigs import ( "encoding/json" "github.com/iwind/TeaGo/rands" ) type HTTPCacheConfig struct { IsPrior bool `yaml:"isPrior" json:"isPrior"` IsOn bool `yaml:"isOn" json:"isOn"` AddStatusHeader bool `yaml:"addStatusHeader" json:"addStatusHeader"` // 是否增加命中状态Header(X-Cache) AddAgeHeader bool `yaml:"addAgeHeader" json:"addAgeHeader"` // 是否增加Age Header EnableCacheControlMaxAge bool `yaml:"enableCacheControlMaxAge" json:"enableCacheControlMaxAge"` // 是否支持Cache-Control: max-age=... DisablePolicyRefs bool `yaml:"disablePolicyRefs" json:"disablePolicyRefs"` // 是否停用策略中定义的条件 Key *HTTPCacheKeyConfig `yaml:"key" json:"key"` // 键值全局配置 PurgeIsOn bool `yaml:"purgeIsOn" json:"purgeIsOn"` // 是否允许使用Purge方法清理 PurgeKey string `yaml:"purgeKey" json:"purgeKey"` // Purge时使用的X-Edge-Purge-Key Stale *HTTPCacheStaleConfig `yaml:"stale" json:"stale"` // 陈旧缓存使用策略 CacheRefs []*HTTPCacheRef `yaml:"cacheRefs" json:"cacheRefs"` // 缓存条件配置 } func (this *HTTPCacheConfig) Init() error { for _, cacheRef := range this.CacheRefs { err := cacheRef.Init() if err != nil { return err } } if this.Key != nil { err := this.Key.Init() if err != nil { return err } } if this.PurgeIsOn && len(this.PurgeKey) == 0 { this.PurgeKey = rands.HexString(32) } return nil } func (this *HTTPCacheConfig) AsJSON() ([]byte, error) { return json.Marshal(this) }