From 37d815bd3c9c70f84a9ad03f914506009add0269 Mon Sep 17 00:00:00 2001 From: Kalashnikov Ilya <1044684+l1bbcsg@users.noreply.github.com> Date: Tue, 20 Jul 2021 13:42:58 +0700 Subject: [PATCH] Tread HTTP headers case-insensitively (#3694) --- src/dash/DashMetrics.js | 17 ++++++++++++++--- test/unit/dash.DashMetrics.js | 24 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/dash/DashMetrics.js b/src/dash/DashMetrics.js index a1e392bca9..a1edb4364f 100644 --- a/src/dash/DashMetrics.js +++ b/src/dash/DashMetrics.js @@ -411,6 +411,10 @@ function DashMetrics(config) { * @instance */ function getLatestMPDRequestHeaderValueByID(id) { + if (!id) { + return null; + } + let headers = {}; let httpRequestList, httpRequest, @@ -427,7 +431,8 @@ function DashMetrics(config) { } } - return headers[id] === undefined ? null : headers[id]; + const value = headers[id.toLowerCase()]; + return value === undefined ? null : value; } /** @@ -439,12 +444,18 @@ function DashMetrics(config) { * @instance */ function getLatestFragmentRequestHeaderValueByID(mediaType, id) { + if (!id) { + return null; + } + let headers = {}; - let httpRequest = getCurrentHttpRequest(mediaType, true); + let httpRequest = getCurrentHttpRequest(mediaType); if (httpRequest) { headers = Utils.parseHttpHeaders(httpRequest._responseHeaders); } - return headers[id] === undefined ? null : headers[id]; + + const value = headers[id.toLowerCase()]; + return value === undefined ? null : value; } /** diff --git a/test/unit/dash.DashMetrics.js b/test/unit/dash.DashMetrics.js index 8ad06b4013..05837a8a46 100644 --- a/test/unit/dash.DashMetrics.js +++ b/test/unit/dash.DashMetrics.js @@ -63,7 +63,19 @@ describe('DashMetrics', function () { }); describe('getLatestMPDRequestHeaderValueByID', () => { + it('should treat headers case-insensitively', () => { + const metrics = { HttpList: [{type: 'MPD', _responseHeaders: 'date: mock'}]}; + metricsModelMock.setMetrics(metrics); + + const lowerCaseValue = dashMetrics.getLatestMPDRequestHeaderValueByID('date'); + const upperCaseValue = dashMetrics.getLatestMPDRequestHeaderValueByID('Date'); + + expect(lowerCaseValue).to.equal('mock'); + expect(upperCaseValue).to.equal('mock'); + }); + it('should return null when getLatestMPDRequestHeaderValueByID is called and id is undefined', () => { + metricsModelMock.setMetrics({}); const lastMpdRequestHeader = dashMetrics.getLatestMPDRequestHeaderValueByID(); expect(lastMpdRequestHeader).to.be.null; // jshint ignore:line @@ -80,7 +92,19 @@ describe('DashMetrics', function () { }); describe('getLatestFragmentRequestHeaderValueByID', () => { + it('should treat headers case-insensitively', () => { + const metrics = { HttpList: [{responsecode: 200, _responseHeaders: 'date: mock'}]}; + metricsModelMock.setMetrics(metrics); + + const lowerCaseValue = dashMetrics.getLatestFragmentRequestHeaderValueByID('stream', 'date'); + const upperCaseValue = dashMetrics.getLatestFragmentRequestHeaderValueByID('stream', 'Date'); + + expect(lowerCaseValue).to.equal('mock'); + expect(upperCaseValue).to.equal('mock'); + }); + it('should return null when getLatestFragmentRequestHeaderValueByID is called and metrics, type and id are undefined', () => { + metricsModelMock.setMetrics({}); const lastFragmentRequestHeader = dashMetrics.getLatestFragmentRequestHeaderValueByID(); expect(lastFragmentRequestHeader).to.be.null; // jshint ignore:line