我们的网站经常使用mp3文件,在我们网站的各种资源中远程加载。我们网站的用户(通常在学校)经常遇到阻止mp3的本地网络问题。我试图设置一些jquery代码来测试我们是否可以加载外部mp3文件列表。
当我在同一个域中请求我测试的文件时,它会起作用,但如果我从我们的任何资产服务器请求它,那么它就会起作用(为了参数)
assets0.example.com
assets1.example.com
assets2.example.com
assets3.example.com
我的代码是:
url = "http://assets0.example.com/path/to/an.mp3"
$.support.cors = true;
$.ajax({
url: url,
type: "get",
success: function(request, status){
console.log("success.");
},
error: function(request, status, error){
console.log("ERROR: request = ",request);
}
});
奇怪的是,当我调用它时,我可以在开发侧栏中看到请求具有200状态,但是具有0字节大小。我的代码运行error
块。
如果我将网址更改为"/path/to/an.mp3"
,那么它使用的是本地版本,则可以正常使用。
我实际上不需要对mp3做任何事情,所以下载零字节实际上很好。如果你知道我的意思,我只需要看看我是否可以得到它。
在我试图获取它的服务器上启用了CORS。我尝试了各种选择。我最接近实际工作的是传递
dataType:" JSONP",
选项中的。然后加载整个文件,但是尝试处理它时会出现语法错误(可能是因为它试图将其解析为json?)。
我更愿意避免加载整个文件,如果可能的话,就像我说:我只需要测试一下我是否可以访问它。
有人能告诉我最好的方法吗?
编辑:这些是我看到的标题(执行' HEAD'请求而不是' GET'):
REQUEST HEADERS:
Host: assets0.example.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://local.dev/
Origin: http://local.dev
Connection: keep-alive
RESPONSE HEADERS:
Accept-Ranges: bytes
Cache-Control: max-age=3600
Connection: keep-alive
Content-Length: 2874138
Content-Type: audio/mpeg
Date: Tue, 05 Dec 2017 15:23:36 GMT
Etag: "507687da-2bdb1a"
Expires: Tue, 05 Dec 2017 16:23:36 GMT
Last-Modified: Thu, 11 Oct 2012 08:48:26 GMT
Server: nginx