Handle missing etag in 304 Not Modified response
GitHub now omits the etag, but 304 implies it matches the one we provided. Just use that one to avoid having an etag-less resource. Fixes #4469
This commit is contained in:
parent
b7bfc7ee52
commit
a766824660
|
@ -375,6 +375,13 @@ struct curlFileTransfer : public FileTransfer
|
||||||
else if (code == CURLE_OK && successfulStatuses.count(httpStatus))
|
else if (code == CURLE_OK && successfulStatuses.count(httpStatus))
|
||||||
{
|
{
|
||||||
result.cached = httpStatus == 304;
|
result.cached = httpStatus == 304;
|
||||||
|
|
||||||
|
// In 2021, GitHub responds to If-None-Match with 304,
|
||||||
|
// but omits ETag. We just use the If-None-Match etag
|
||||||
|
// since 304 implies they are the same.
|
||||||
|
if (httpStatus == 304 && result.etag == "")
|
||||||
|
result.etag = request.expectedETag;
|
||||||
|
|
||||||
act.progress(result.bodySize, result.bodySize);
|
act.progress(result.bodySize, result.bodySize);
|
||||||
done = true;
|
done = true;
|
||||||
callback(std::move(result));
|
callback(std::move(result));
|
||||||
|
|
Loading…
Reference in a new issue