2015-09-05 60 views
0

首先,我尝试使用onload事件等来正常获取图像,但canvas不让我将其导出,因为它“受感染”或其他。尝试使用Ajax获取图像时的访问控制源问题

于是我试图让像浏览器中的图像不(GET请求),但它仍然没有让我得到

var xhr = new XMLHttpRequest(); 
xhr.open('GET', url, true); 
xhr.responseType = 'blob'; 
xhr.onload = function(e){ 
if(this.status == 200){ 
    do things 
}  
}; 
xhr.send(); 

我不明白的数据为何此安全限制的东西存在,如果浏览器可以直接访问图像?与我使用javascript获取图像数据不是一回事吗?

回答

2

于是我试图让像浏览器中的图像不(GET请求),

帆布和XMLHttpRequest的均采用CORS具有权限才能在不同的来源访问数据。您从中请求数据的服务器必须设置CORS头以授予该权限。

我不明白为什么这个安全限制的东西存在,如果浏览器可以直接访问图片?与我使用javascript获取图像数据不是一回事吗?

直接访问图像会将图像显示给用户。

使用JavaScript访问图像将允许网站的作者对图像数据做任何他们喜欢的操作,包括将其复制到自己的服务器上。

该图像可能包含Joe Random网站不应该能够复制的数据(例如http://financial.intranet/my/secret/company/financial/chart.png),只需要访问者的浏览器获取它而不是直接获取它。

该数据可能受到IP检查,网络路由,HTTP验证,Cookie或一系列浏览器可以设置的其他安全限制的保护。如果任何网站可以让访问者的浏览器代表他们提出请求,那么任何网站都可以模仿他们的任何一个访问者并获得秘密。

+0

以及它仍然没有意义,因为我可以使用卷曲在服务器上获得该图像,这只是更烦人的 – thelolcat

+0

,但感谢解释为什么发生这种情况:) – thelolcat

+0

@thelolcat - 如果你可以使用cURL获取图像,那很好,但浏览器不知道你可以做到这一点。托管映像的服务器可能会检查浏览器的IP地址,或者需要cookie,或者位于运行cURL的服务器无法访问的Intranet上。 – Quentin