Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'internal/httprange/http_reader.go')
-rw-r--r--internal/httprange/http_reader.go23
1 files changed, 7 insertions, 16 deletions
diff --git a/internal/httprange/http_reader.go b/internal/httprange/http_reader.go
index 467256a0..589351fa 100644
--- a/internal/httprange/http_reader.go
+++ b/internal/httprange/http_reader.go
@@ -18,15 +18,12 @@ var (
ErrNotFound = errors.New("resource not found")
// ErrRangeRequestsNotSupported is returned by Seek and Read
- // when the remote server does not allow range requests (Accept-Ranges was not set)
- ErrRangeRequestsNotSupported = errors.New("range requests are not supported by the remote server")
+ // when the remote server does not allow range requests for a given request parameters
+ ErrRangeRequestsNotSupported = errors.New("requests range is not supported by the remote server")
// ErrInvalidRange is returned by Read when trying to read past the end of the file
ErrInvalidRange = errors.New("invalid range")
- // ErrContentHasChanged is returned by Read when the content has changed since the first request
- ErrContentHasChanged = errors.New("content has changed since first request")
-
// seek errors no need to export them
errSeekInvalidWhence = errors.New("invalid whence")
errSeekOutsideRange = errors.New("outside of range")
@@ -106,21 +103,12 @@ func (r *Reader) prepareRequest() (*http.Request, error) {
return nil, ErrInvalidRange
}
- req, err := http.NewRequest("GET", r.Resource.URL, nil)
+ req, err := r.Resource.Request()
if err != nil {
return nil, err
}
req = req.WithContext(r.ctx)
-
- if r.Resource.ETag != "" {
- req.Header.Set("ETag", r.Resource.ETag)
- } else if r.Resource.LastModified != "" {
- // Last-Modified should be a fallback mechanism in case ETag is not present
- // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified
- req.Header.Set("If-Range", r.Resource.LastModified)
- }
-
req.Header.Set("Range", fmt.Sprintf("bytes=%d-%d", r.offset, r.rangeStart+r.rangeSize-1))
return req, nil
@@ -133,14 +121,17 @@ func (r *Reader) setResponse(res *http.Response) error {
// some servers return 200 OK for bytes=0-
// TODO: should we handle r.Resource.Last-Modified as well?
if r.offset > 0 || r.Resource.ETag != "" && r.Resource.ETag != res.Header.Get("ETag") {
- return ErrContentHasChanged
+ r.Resource.setError(ErrRangeRequestsNotSupported)
+ return ErrRangeRequestsNotSupported
}
case http.StatusNotFound:
+ r.Resource.setError(ErrNotFound)
return ErrNotFound
case http.StatusPartialContent:
// Requested `Range` request succeeded https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206
break
case http.StatusRequestedRangeNotSatisfiable:
+ r.Resource.setError(ErrRangeRequestsNotSupported)
return ErrRangeRequestsNotSupported
default:
return fmt.Errorf("httprange: read response %d: %q", res.StatusCode, res.Status)