Skip to content

Commit

Permalink
Fix range header regression
Browse files Browse the repository at this point in the history
Range headers should not be sent when requesting the entire resource.
This fixes compatibility with Microsoft IIS web server.

Introduced in work on issue shaka-project#1788

Change-Id: I151a2f15d4f5e95531e16d5372ee9a051135f12f
  • Loading branch information
joeyparrish committed May 1, 2019
1 parent 3901fcb commit b513a48
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 7 deletions.
8 changes: 5 additions & 3 deletions lib/util/networking.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,11 @@ shaka.util.Networking = class {
const request = shaka.net.NetworkingEngine.makeRequest(
uris, retryParameters);

// Set the Range header. Note that some web servers don't accept Range
// headers, so don't set one if it's not strictly required.
if (start != null) {
if (start == 0 && end == null) {
// This is a request for the entire segment. The Range header is not
// required. Note that some web servers don't accept Range headers, so
// don't set one if it's not strictly required.
} else {
if (end) {
request.headers['Range'] = 'bytes=' + start + '-' + end;
} else {
Expand Down
17 changes: 16 additions & 1 deletion test/net/networking_engine_unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -1209,7 +1209,22 @@ describe('NetworkingEngine', /** @suppress {accessControls} */ function() {
*/
function createRequest(uri, retryParameters) {
retryParameters = retryParameters ||
shaka.net.NetworkingEngine.defaultRetryParameters();
shaka.net.NetworkingEngine.defaultRetryParameters();
return shaka.net.NetworkingEngine.makeRequest([uri], retryParameters);
}

describe('createSegmentRequest', () => {
it('does not add range headers to requests for the whole segment', () => {
// You had _one_ job, createSegmentRequest!

const request = shaka.util.Networking.createSegmentRequest(
/* uris= */ ['/foo.mp4'],
/* start= */ 0,
/* end= */ null,
shaka.net.NetworkingEngine.defaultRetryParameters());

const keys = Object.keys(request.headers).map((k) => k.toLowerCase());
expect(keys).not.toContain('range');
});
});
}); // describe('NetworkingEngine')
12 changes: 9 additions & 3 deletions test/test/util/fake_networking_engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -314,14 +314,20 @@ shaka.test.FakeNetworkingEngine = class {
* @param {?number} endByte
*/
static expectRangeRequest(requestSpy, uri, startByte, endByte) {
let range = 'bytes=' + startByte + '-';
if (endByte != null) range += endByte;
const headers = {};
if (startByte == 0 && endByte == null) {
// No header required.
} else {
let range = 'bytes=' + startByte + '-';
if (endByte != null) range += endByte;
headers['Range'] = range;
}

expect(requestSpy).toHaveBeenCalledWith(
shaka.net.NetworkingEngine.RequestType.SEGMENT,
jasmine.objectContaining({
uris: [uri],
headers: jasmine.objectContaining({'Range': range}),
headers: headers,
}));
}
};
Expand Down

0 comments on commit b513a48

Please sign in to comment.