To resume a download, you need to send not only the Range
request header, but also the If-Range
request header which should contain either the unique file identifier or the file modification timestamp.
If the server returns an ETag
response header on the initial download, then you should use it in the If-Range
header of the subsequent resume requests. Or if it returns a Last-Modified
response header, then you should use it in the If-Range
request header instead.
Looking at your logs, the server has sent a Last-Modified
response header. So you should send it back along in an If-Range
header of the resume request.
// Initial download.
String lastModified = connection.getHeaderField("Last-Modified");
// ...
// Resume download.
connection.setRequestProperty("If-Range", lastModified);
The server will use this information to verify if you’re requesting exactly the same file.