测试是否可以访问远程文件(不同的域)

时间:2017-12-05 15:09:12

标签: jquery ajax file cors

我们的网站经常使用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

0 个答案:

没有答案