From f7733a74ab8f1c7ecfaa302fd9c13b4c3d395f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Luiz=20dos=20Santos?= Date: Tue, 12 Feb 2019 15:43:18 -0200 Subject: [PATCH 1/2] Compatibility fix for Caddy web server Add Content-Type: application/octet-stream for upload test. This fixes a compatibility issue with Caddy web server --- speedtest_worker.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/speedtest_worker.js b/speedtest_worker.js index de8969d..9fcfaf5 100644 --- a/speedtest_worker.js +++ b/speedtest_worker.js @@ -471,6 +471,7 @@ function ulTest(done) { }; xhr[i].open("POST", settings.url_ul + url_sep(settings.url_ul) + "r=" + Math.random(), true); // random string to prevent caching xhr[i].setRequestHeader("Content-Encoding", "identity"); // disable compression (some browsers may refuse it, but data is incompressible anyway) + xhr[i].setRequestHeader("Content-Type", "application/octet-stream"); xhr[i].send(reqsmall); } else { // REGULAR version, no workaround @@ -504,6 +505,7 @@ function ulTest(done) { // send xhr xhr[i].open("POST", settings.url_ul + url_sep(settings.url_ul) + "r=" + Math.random(), true); // random string to prevent caching xhr[i].setRequestHeader("Content-Encoding", "identity"); // disable compression (some browsers may refuse it, but data is incompressible anyway) + xhr[i].setRequestHeader("Content-Type", "application/octet-stream"); xhr[i].send(req); } }.bind(this), From 8ac704066e9e4276f461ad104c4164d7757643ae Mon Sep 17 00:00:00 2001 From: adolfintel Date: Tue, 12 Feb 2019 18:45:27 +0100 Subject: [PATCH 2/2] Added try-catches in upload test for XHR headers --- speedtest_worker.js | 16 ++++++++++++---- speedtest_worker.min.js | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/speedtest_worker.js b/speedtest_worker.js index 9fcfaf5..6fec4ae 100644 --- a/speedtest_worker.js +++ b/speedtest_worker.js @@ -470,8 +470,12 @@ function ulTest(done) { testStream(i, 0); }; xhr[i].open("POST", settings.url_ul + url_sep(settings.url_ul) + "r=" + Math.random(), true); // random string to prevent caching - xhr[i].setRequestHeader("Content-Encoding", "identity"); // disable compression (some browsers may refuse it, but data is incompressible anyway) - xhr[i].setRequestHeader("Content-Type", "application/octet-stream"); + try{ + xhr[i].setRequestHeader("Content-Encoding", "identity"); // disable compression (some browsers may refuse it, but data is incompressible anyway) + }catch(e){} + try{ + xhr[i].setRequestHeader("Content-Type", "application/octet-stream"); //force content-type to application/octet-stream in case the server misinterprets it + }catch(e){} xhr[i].send(reqsmall); } else { // REGULAR version, no workaround @@ -504,8 +508,12 @@ function ulTest(done) { }.bind(this); // send xhr xhr[i].open("POST", settings.url_ul + url_sep(settings.url_ul) + "r=" + Math.random(), true); // random string to prevent caching - xhr[i].setRequestHeader("Content-Encoding", "identity"); // disable compression (some browsers may refuse it, but data is incompressible anyway) - xhr[i].setRequestHeader("Content-Type", "application/octet-stream"); + try{ + xhr[i].setRequestHeader("Content-Encoding", "identity"); // disable compression (some browsers may refuse it, but data is incompressible anyway) + }catch(e){} + try{ + xhr[i].setRequestHeader("Content-Type", "application/octet-stream"); //force content-type to application/octet-stream in case the server misinterprets it + }catch(e){} xhr[i].send(req); } }.bind(this), diff --git a/speedtest_worker.min.js b/speedtest_worker.min.js index cda39bd..444657b 100644 --- a/speedtest_worker.min.js +++ b/speedtest_worker.min.js @@ -1 +1 @@ -var testStatus=-1,dlStatus="",ulStatus="",pingStatus="",jitterStatus="",clientIp="",dlProgress=0,ulProgress=0,pingProgress=0,testId=null,log="";function tlog(s){2<=settings.telemetry_level&&(log+=Date.now()+": "+s+"\n")}function tverb(s){3<=settings.telemetry_level&&(log+=Date.now()+": "+s+"\n")}function twarn(s){2<=settings.telemetry_level&&(log+=Date.now()+" WARN: "+s+"\n"),console.warn(s)}var settings={test_order:"IP_D_U",time_ul_max:15,time_dl_max:15,time_auto:!0,time_ulGraceTime:3,time_dlGraceTime:1.5,count_ping:10,url_dl:"garbage.php",url_ul:"empty.php",url_ping:"empty.php",url_getIp:"getIP.php",getIp_ispInfo:!0,getIp_ispInfo_distance:"km",xhr_dlMultistream:10,xhr_ulMultistream:3,xhr_multistreamDelay:300,xhr_ignoreErrors:1,xhr_dlUseBlob:!1,xhr_ul_blob_megabytes:20,garbagePhp_chunkSize:20,enable_quirks:!0,ping_allowPerformanceApi:!0,overheadCompensationFactor:1.06,useMebibits:!1,telemetry_level:0,url_telemetry:"telemetry/telemetry.php",telemetry_extra:""},xhr=null,interval=null,test_pointer=0;function url_sep(url){return url.match(/\?/)?"&":"?"}function clearRequests(){if(tverb("stopping pending XHRs"),xhr){for(var i=0;i=settings.test_order.length)0settings.time_dl_max||failed)&&((failed||isNaN(dlStatus))&&(dlStatus="Fail"),clearRequests(),clearInterval(interval),dlProgress=1,tlog("dlTest: "+dlStatus+", took "+((new Date).getTime()-startT)+"ms"),done())}else t>1e3*settings.time_dlGraceTime&&(0settings.time_ul_max||failed)&&((failed||isNaN(ulStatus))&&(ulStatus="Fail"),clearRequests(),clearInterval(interval),ulProgress=1,tlog("ulTest: "+ulStatus+", took "+((new Date).getTime()-startT)+"ms"),done())}else t>1e3*settings.time_ulGraceTime&&(0=settings.test_order.length)0settings.time_dl_max||failed)&&((failed||isNaN(dlStatus))&&(dlStatus="Fail"),clearRequests(),clearInterval(interval),dlProgress=1,tlog("dlTest: "+dlStatus+", took "+((new Date).getTime()-startT)+"ms"),done())}else t>1e3*settings.time_dlGraceTime&&(0settings.time_ul_max||failed)&&((failed||isNaN(ulStatus))&&(ulStatus="Fail"),clearRequests(),clearInterval(interval),ulProgress=1,tlog("ulTest: "+ulStatus+", took "+((new Date).getTime()-startT)+"ms"),done())}else t>1e3*settings.time_ulGraceTime&&(0