From 8a46b8709518a51e688147ca3cea458b1634f62c Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Tue, 7 May 2024 20:15:47 +0800 Subject: [PATCH] =?UTF-8?q?Partial=20Content=E6=AF=8F=E6=AC=A1=E5=86=99?= =?UTF-8?q?=E5=85=A5=E7=BC=93=E5=AD=98=E6=97=B6=E9=83=BD=E6=A3=80=E6=9F=A5?= =?UTF-8?q?Content-MD5=E6=98=AF=E5=90=A6=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/caches/writer_partial_file.go | 4 ++++ internal/nodes/http_writer.go | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/internal/caches/writer_partial_file.go b/internal/caches/writer_partial_file.go index fbdfe6e..da7b4fb 100644 --- a/internal/caches/writer_partial_file.go +++ b/internal/caches/writer_partial_file.go @@ -294,6 +294,10 @@ func (this *PartialFileWriter) IsNew() bool { return this.isNew && len(this.ranges.Ranges) == 0 } +func (this *PartialFileWriter) Ranges() *PartialRanges { + return this.ranges +} + func (this *PartialFileWriter) remove() { _ = fsutils.Remove(this.rawWriter.Name()) diff --git a/internal/nodes/http_writer.go b/internal/nodes/http_writer.go index df790e0..f8822fa 100644 --- a/internal/nodes/http_writer.go +++ b/internal/nodes/http_writer.go @@ -355,6 +355,19 @@ func (this *HTTPWriter) PrepareCache(resp *http.Response, size int64) { } this.cacheWriter = cacheWriter + // 对比Content-MD5 + { + partialWriter, ok := cacheWriter.(*caches.PartialFileWriter) + if ok { + if partialWriter.Ranges().Version >= 2 && partialWriter.Ranges().ContentMD5 != this.Header().Get("Content-MD5") { + _ = this.cacheWriter.Discard() + this.cacheWriter = nil + return + } + } + } + + // 判断是否新创建的缓存文件 if this.isPartial { this.partialFileIsNew = cacheWriter.(*caches.PartialFileWriter).IsNew() }