首先我尝试使用onload事件等正常获取图像,但画布并不允许我导出它,因为它已经" Tainted"或者其他什么。
然后我尝试像浏览器一样获取图像(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获取图像数据一样吗?
答案 0 :(得分:2)
然后我尝试像浏览器一样获取图像(GET请求),
Canvas和XMLHttpRequest都使用CORS来获取跨不同来源访问数据的权限。您从中请求数据的服务器必须设置CORS标头以授予该权限。
如果浏览器可以直接访问图像,我不明白为什么存在这种安全限制?和我用javascript获取图像数据一样吗?
直接访问图像会将图像显示给用户。
使用JavaScript访问图像将允许网站的作者对图像数据做任何他们喜欢的事情,包括将其复制到自己的服务器。
图片可能包含Joe Random Website不能仅仅通过询问访问者来复制的数据(例如http://financial.intranet/my/secret/company/financial/chart.png
)。浏览器获取它而不是直接获取它。
该数据可能受到IP检查,网络路由,HTTP身份验证,Cookie或浏览器可以设置的许多其他安全限制的保护。如果任何网站可以吸引他们的访客'浏览器代表他们发出请求,然后任何网站都可以冒充任何一个访问者并获取秘密。