Skip to content
This repository was archived by the owner on Jan 3, 2026. It is now read-only.

Commit 651560e

Browse files
committed
refactor(net):传递请求头 (AlistGo#8031) 关闭 AlistGo#8008)
1 parent 6520fb9 commit 651560e

File tree

14 files changed

+57
-44
lines changed

14 files changed

+57
-44
lines changed

drivers/alias/util.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func (d *Alias) get(ctx context.Context, path string, dst, sub string) (model.Ob
6363
Size: obj.GetSize(),
6464
Modified: obj.ModTime(),
6565
IsFolder: obj.IsDir(),
66+
HashInfo: obj.GetHash(),
6667
}, nil
6768
}
6869

drivers/crypt/driver.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,7 @@ func (d *Crypt) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (
263263
}
264264
rrc := remoteLink.RangeReadCloser
265265
if len(remoteLink.URL) > 0 {
266-
267-
rangedRemoteLink := &model.Link{
268-
URL: remoteLink.URL,
269-
Header: remoteLink.Header,
270-
}
271-
var converted, err = stream.GetRangeReadCloserFromLink(remoteFileSize, rangedRemoteLink)
266+
var converted, err = stream.GetRangeReadCloserFromLink(remoteFileSize, remoteLink)
272267
if err != nil {
273268
return nil, err
274269
}
@@ -304,7 +299,6 @@ func (d *Crypt) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (
304299

305300
resultRangeReadCloser := &model.RangeReadCloser{RangeReader: resultRangeReader, Closers: remoteClosers}
306301
resultLink := &model.Link{
307-
Header: remoteLink.Header,
308302
RangeReadCloser: resultRangeReadCloser,
309303
Expiration: remoteLink.Expiration,
310304
}

drivers/quark_uc/util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ x-oss-user-agent:aliyun-sdk-js/6.6.1 Chrome 98.0.4758.80 on Windows 10 64-bit
170170
if res.StatusCode() != 200 {
171171
return "", fmt.Errorf("up status: %d, error: %s", res.StatusCode(), res.String())
172172
}
173-
return res.Header().Get("ETag"), nil
173+
return res.Header().Get("Etag"), nil
174174
}
175175

176176
func (d *QuarkOrUC) upCommit(pre UpPreResp, md5s []string) error {

drivers/quqi/util.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,10 +304,6 @@ func (d *Quqi) linkFromCDN(id string) (*model.Link, error) {
304304
}
305305

306306
return &model.Link{
307-
Header: http.Header{
308-
"Origin": []string{"https://quqi.com"},
309-
"Cookie": []string{d.Cookie},
310-
},
311307
RangeReadCloser: &model.RangeReadCloser{RangeReader: resultRangeReader, Closers: remoteClosers},
312308
Expiration: &expiration,
313309
}, nil

internal/net/request.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,9 @@ func (d *downloader) tryDownloadChunk(params *HttpRequestParams, ch *chunk) (int
382382
if resp == nil {
383383
return 0, err
384384
}
385+
if resp.StatusCode == http.StatusRequestedRangeNotSatisfiable {
386+
return 0, err
387+
}
385388
if ch.id == 0 { //第1个任务 有限的重试,超过重试就会结束请求
386389
switch resp.StatusCode {
387390
default:

internal/net/serve.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func ServeHTTP(w http.ResponseWriter, r *http.Request, name string, modTime time
114114

115115
// 使用请求的Context
116116
// 不然从sendContent读不到数据,即使请求断开CopyBuffer也会一直堵塞
117-
ctx := r.Context()
117+
ctx := context.WithValue(r.Context(), "request_header", &r.Header)
118118
switch {
119119
case len(ranges) == 0:
120120
reader, err := RangeReadCloser.RangeRead(ctx, http_range.Range{Length: -1})

internal/net/util.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"github.com/alist-org/alist/v3/pkg/utils"
14+
1415
"github.com/alist-org/alist/v3/pkg/http_range"
1516
log "github.com/sirupsen/logrus"
1617
)
@@ -70,6 +71,7 @@ func checkIfMatch(w http.ResponseWriter, r *http.Request) condResult {
7071
if im == "" {
7172
return condNone
7273
}
74+
r.Header.Del("If-Match")
7375
for {
7476
im = textproto.TrimString(im)
7577
if len(im) == 0 {
@@ -97,7 +99,11 @@ func checkIfMatch(w http.ResponseWriter, r *http.Request) condResult {
9799

98100
func checkIfUnmodifiedSince(r *http.Request, modtime time.Time) condResult {
99101
ius := r.Header.Get("If-Unmodified-Since")
100-
if ius == "" || isZeroTime(modtime) {
102+
if ius == "" {
103+
return condNone
104+
}
105+
r.Header.Del("If-Unmodified-Since")
106+
if isZeroTime(modtime) {
101107
return condNone
102108
}
103109
t, err := http.ParseTime(ius)
@@ -119,6 +125,7 @@ func checkIfNoneMatch(w http.ResponseWriter, r *http.Request) condResult {
119125
if inm == "" {
120126
return condNone
121127
}
128+
r.Header.Del("If-None-Match")
122129
buf := inm
123130
for {
124131
buf = textproto.TrimString(buf)
@@ -149,7 +156,11 @@ func checkIfModifiedSince(r *http.Request, modtime time.Time) condResult {
149156
return condNone
150157
}
151158
ims := r.Header.Get("If-Modified-Since")
152-
if ims == "" || isZeroTime(modtime) {
159+
if ims == "" {
160+
return condNone
161+
}
162+
r.Header.Del("If-Modified-Since")
163+
if isZeroTime(modtime) {
153164
return condNone
154165
}
155166
t, err := http.ParseTime(ims)
@@ -173,6 +184,7 @@ func checkIfRange(w http.ResponseWriter, r *http.Request, modtime time.Time) con
173184
if ir == "" {
174185
return condNone
175186
}
187+
r.Header.Del("If-Range")
176188
etag, _ := scanETag(ir)
177189
if etag != "" {
178190
if etagStrongMatch(etag, w.Header().Get("Etag")) {

internal/stream/stream.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ func (c *headCache) read(p []byte) (n int, err error) {
384384
n, err = lr.Read(buf[off:])
385385
off += n
386386
c.cur += int64(n)
387-
if err == io.EOF && n == int(bufL) {
387+
if err == io.EOF && off == int(bufL) {
388388
err = nil
389389
}
390390
if err != nil {
@@ -468,7 +468,7 @@ func (r *RangeReadReadAtSeeker) getReaderAtOffset(off int64) (*readerCur, error)
468468
}
469469
}
470470
if rc != nil && off-rc.cur <= utils.MB {
471-
n, err := utils.CopyWithBufferN(utils.NullWriter{}, rc.reader, off-rc.cur)
471+
n, err := utils.CopyWithBufferN(io.Discard, rc.reader, off-rc.cur)
472472
rc.cur += n
473473
if err == io.EOF && rc.cur == off {
474474
err = nil

internal/stream/util.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ package stream
33
import (
44
"context"
55
"fmt"
6-
"github.com/alist-org/alist/v3/pkg/utils"
76
"io"
87
"net/http"
98

109
"github.com/alist-org/alist/v3/internal/model"
1110
"github.com/alist-org/alist/v3/internal/net"
1211
"github.com/alist-org/alist/v3/pkg/http_range"
12+
"github.com/alist-org/alist/v3/pkg/utils"
1313
log "github.com/sirupsen/logrus"
1414
)
1515

@@ -19,7 +19,11 @@ func GetRangeReadCloserFromLink(size int64, link *model.Link) (model.RangeReadCl
1919
}
2020
rangeReaderFunc := func(ctx context.Context, r http_range.Range) (io.ReadCloser, error) {
2121
if link.Concurrency != 0 || link.PartSize != 0 {
22-
header := net.ProcessHeader(http.Header{}, link.Header)
22+
requestHeader := ctx.Value("request_header")
23+
if requestHeader == nil {
24+
requestHeader = &http.Header{}
25+
}
26+
header := net.ProcessHeader(*(requestHeader.(*http.Header)), link.Header)
2327
down := net.NewDownloader(func(d *net.Downloader) {
2428
d.Concurrency = link.Concurrency
2529
d.PartSize = link.PartSize
@@ -60,7 +64,11 @@ func GetRangeReadCloserFromLink(size int64, link *model.Link) (model.RangeReadCl
6064
}
6165

6266
func RequestRangedHttp(ctx context.Context, link *model.Link, offset, length int64) (*http.Response, error) {
63-
header := net.ProcessHeader(http.Header{}, link.Header)
67+
requestHeader := ctx.Value("request_header")
68+
if requestHeader == nil {
69+
requestHeader = &http.Header{}
70+
}
71+
header := net.ProcessHeader(*(requestHeader.(*http.Header)), link.Header)
6472
header = http_range.ApplyRangeToHttpHeader(http_range.Range{Start: offset, Length: length}, header)
6573

6674
return net.RequestHttp(ctx, "GET", header, link.URL)

pkg/utils/io.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -232,10 +232,4 @@ func CopyWithBufferN(dst io.Writer, src io.Reader, n int64) (written int64, err
232232
err = io.EOF
233233
}
234234
return
235-
}
236-
237-
type NullWriter struct{}
238-
239-
func (NullWriter) Write(p []byte) (n int, err error) {
240-
return len(p), nil
241235
}

0 commit comments

Comments
 (0)