Skip to content

Commit 25a8c2f

Browse files
authored
Add content-length header for s3 stream content (#1143)
1 parent cc6f684 commit 25a8c2f

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

server/router.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
418418
} else {
419419
ctx.SetHeader("Content-Type", ctJavaScript)
420420
}
421+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", fi.Size()))
421422
ctx.SetHeader("Last-Modified", fi.ModTime().UTC().Format(http.TimeFormat))
422423
ctx.SetHeader("Cache-Control", ccImmutable)
423424
return f // auto closed
@@ -558,13 +559,14 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
558559
h.Write([]byte(target))
559560
h.Write([]byte(v))
560561
savePath := normalizeSavePath(zoneIdHeader, path.Join("modules/x", hex.EncodeToString(h.Sum(nil))+".css"))
561-
r, _, err := buildStorage.Get(savePath)
562+
r, fi, err := buildStorage.Get(savePath)
562563
if err != nil && err != storage.ErrNotFound {
563564
return rex.Status(500, err.Error())
564565
}
565566
if err == nil {
566567
ctx.SetHeader("Cache-Control", ccImmutable)
567568
ctx.SetHeader("Content-Type", ctCSS)
569+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", fi.Size()))
568570
return r // auto closed
569571
}
570572
res, err := fetchClient.Fetch(ctxUrl, nil)
@@ -701,7 +703,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
701703
h.Write([]byte(target))
702704
h.Write([]byte(v))
703705
savePath := normalizeSavePath(zoneIdHeader, path.Join("modules/x", hex.EncodeToString(h.Sum(nil))+".mjs"))
704-
content, _, err := buildStorage.Get(savePath)
706+
content, fi, err := buildStorage.Get(savePath)
705707
if err != nil && err != storage.ErrNotFound {
706708
return rex.Status(500, err.Error())
707709
}
@@ -786,6 +788,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
786788
return rex.Status(500, err.Error())
787789
}
788790
body = bytes.NewReader([]byte(out.Code))
791+
fi = nil
789792
go buildStorage.Put(savePath, strings.NewReader(out.Code))
790793
}
791794
if extname == ".css" && query.Has("module") {
@@ -797,13 +800,17 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
797800
return rex.Status(500, "Failed to read css")
798801
}
799802
body = strings.NewReader(fmt.Sprintf("var style = document.createElement('style');\nstyle.textContent = %s;\ndocument.head.appendChild(style);\nexport default null;", utils.MustEncodeJSON(string(css))))
803+
fi = nil
800804
}
801805
ctx.SetHeader("Cache-Control", ccImmutable)
802806
if extname == ".css" {
803807
ctx.SetHeader("Content-Type", ctCSS)
804808
} else {
805809
ctx.SetHeader("Content-Type", ctJavaScript)
806810
}
811+
if fi != nil {
812+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", fi.Size()))
813+
}
807814
return body // auto closed
808815
}
809816
}
@@ -1162,6 +1169,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
11621169
ctx.SetHeader("Content-Type", contentType)
11631170
}
11641171
}
1172+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", stat.Size()))
11651173
if cacheHit {
11661174
ctx.SetHeader("X-Raw-File-Cache-Status", "HIT")
11671175
}
@@ -1239,8 +1247,9 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
12391247
xxh := xxhash.New()
12401248
xxh.Write([]byte(strings.Join(exports, ",")))
12411249
savePath = strings.TrimSuffix(savePath, ".mjs") + "_" + base64.RawURLEncoding.EncodeToString(xxh.Sum(nil)) + ".mjs"
1242-
f2, _, err := buildStorage.Get(savePath)
1250+
f2, stat, err := buildStorage.Get(savePath)
12431251
if err == nil {
1252+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", stat.Size()))
12441253
return f2 // auto closed
12451254
}
12461255
if err != storage.ErrNotFound {
@@ -1275,6 +1284,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
12751284
}
12761285
return bytes.ReplaceAll(buffer, []byte("{ESM_CDN_ORIGIN}"), []byte(origin))
12771286
}
1287+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", stat.Size()))
12781288
return f // auto closed
12791289
}
12801290
}
@@ -1665,8 +1675,9 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
16651675
xxh := xxhash.New()
16661676
xxh.Write([]byte(strings.Join(exports, ",")))
16671677
savePath = strings.TrimSuffix(savePath, ".mjs") + "_" + base64.RawURLEncoding.EncodeToString(xxh.Sum(nil)) + ".mjs"
1668-
f2, _, err := buildStorage.Get(savePath)
1678+
f2, stat, err := buildStorage.Get(savePath)
16691679
if err == nil {
1680+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", stat.Size()))
16701681
return f2 // auto closed
16711682
}
16721683
if err != storage.ErrNotFound {
@@ -1685,6 +1696,7 @@ func esmRouter(db Database, buildStorage storage.Storage, logger *log.Logger) re
16851696
return ret
16861697
}
16871698
}
1699+
ctx.SetHeader("Content-Length", fmt.Sprintf("%d", fi.Size()))
16881700
return f // auto closed
16891701
}
16901702

0 commit comments

Comments
 (0)