XMLHttpRequest误报文件存在(返回状态200)问题求助
为什么不存在的MP3文件返回HTTP 200状态码?
我开发了一款浏览器日记程序,计划在特定日期播放当日的Song-of-the-Day(mp3)文件,因此需要检查对应文件是否存在。目前仅存在1月1日对应的0101.mp3文件,仅该日期应显示歌曲可用图标。
初始检测代码
我通过XMLHttpRequest发送HEAD请求检测文件:
function check4Sotd(month, day) { var sotd = 'mydocs/sotd/' + pad(month) + pad(day) + '.mp3'; // pad puts leading zeroes, thus file for 1 Jan. will be 0101.mp3 var sotdexists = false; // assume there is no Song-of-the-Day file const myReq = new XMLHttpRequest(); myReq.open('HEAD', sotd, false); myReq.send(); console.log(sotd + " --- " + myReq.status); if (myReq.status == 200) { // then the mp3 file exists sotdexists = true; } /* Some other stuff */ if(sotdexists) { $("#sotdIcon").show(); // show Song-of-the-Day icon } };
异常控制台输出
控制台显示多个不存在的文件也返回状态200(仅0101.mp3应返回200):
mydocs/sotd/0113.mp3 --- 404 mydocs/sotd/0112.mp3 --- 404 mydocs/sotd/0111.mp3 --- 200 mydocs/sotd/0110.mp3 --- 200 mydocs/sotd/0109.mp3 --- 200 mydocs/sotd/0108.mp3 --- 200 mydocs/sotd/0101.mp3 --- 200 mydocs/sotd/1231.mp3 --- 404 mydocs/sotd/1230.mp3 --- 404 mydocs/sotd/1201.mp3 --- 404 mydocs/sotd/0201.mp3 --- 200 mydocs/sotd/0202.mp3 --- 404 mydocs/sotd/0102.mp3 --- 200 mydocs/sotd/0131.mp3 --- 200 mydocs/sotd/0121.mp3 --- 200 mydocs/sotd/0120.mp3 --- 404
修改后的代码
我尝试修改文件名后问题依旧,随后调整代码为监听onreadystatechange:
const myReq = new XMLHttpRequest(); myReq.onreadystatechange = function() { console.log(sotd + " -- " + this.readyState + " -- " + this.status); if (this.readyState == 4 && this.status == 200) { sotdexists = true; } }; myReq.open('HEAD', sotd, false); myReq.send();
修改后的控制台输出
但日志仍显示不存在的文件返回状态200:
mydocs/sotd/0113.mp3 -- 1 -- 0 mydocs/sotd/0113.mp3 -- 4 -- 404 mydocs/sotd/0112.mp3 -- 1 -- 0 mydocs/sotd/0112.mp3 -- 4 -- 404 mydocs/sotd/0111.mp3 -- 1 -- 0 mydocs/sotd/0111.mp3 -- 4 -- 200 mydocs/sotd/0110.mp3 -- 1 -- 0 mydocs/sotd/0110.mp3 -- 4 -- 200 mydocs/sotd/0109.mp3 -- 1 -- 0 mydocs/sotd/0109.mp3 -- 4 -- 200 mydocs/sotd/0101.mp3 -- 1 -- 0 mydocs/sotd/0101.mp3 -- 4 -- 200 mydocs/sotd/0129.mp3 -- 1 -- 0 mydocs/sotd/0129.mp3 -- 4 -- 404
仅0101.mp3实际存在,为何其他不存在的文件也返回状态200?
内容的提问来源于stack exchange,提问作者R.E. Tired
相关产品推荐
相关产品推荐

