javascript - 尝试使用 Ajax 获取图像时出现访问控制源问题

标签 javascript ajax image security browser

首先,我尝试通过 onload 事件等正常获取图像,但 Canvas 不允许我导出它,因为它是“被污染的”或其他什么。

然后我尝试像浏览器一样获取图像(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获取图像数据是一样的吗?

最佳答案

So then I tried to get the image like the browser does (GET request),

Canvas 和 XMLHttpRequest 都使用 CORS 来获得跨不同来源访问数据的权限。您请求数据的服务器必须设置 CORS header 才能授予该权限。

I don't understand why does this security limitation thing exists, if the browser can access the image directly? Isn't that the same thing as me getting the image data with javascript?

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

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

该图像可能包含 Joe Random Website 无法仅通过以下方式复制的数据(例如 http://financial.intranet/my/secret/company/financial/chart.png)要求访问者的浏览器获取它,而不是直接获取。

该数据可能受到 IP 检查、网络路由、HTTP 身份验证、Cookie 或浏览器可设置的许多其他安全限制的保护。如果任何网站都可以让访问者的浏览器代表他们发出请求,那么任何网站都可以冒充其任何访问者并获取 secret 。

关于javascript - 尝试使用 Ajax 获取图像时出现访问控制源问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414917/

相关文章:

javascript - 如何为具有不同 id 属性的多个表单概括文件上传 Web 表单的代码?

javascript - 如何在javascript变量中永久存储值

html - 如何轻松地在图像中间制作文字标题

javascript - 将参数从 View 传递到 Controller 再到 AngularJS 中的工厂

javascript - 从 ClojureScript 中的 html 字符串中提取元素

jquery - 如何将图像文件和表单数据从 Ajax 传递到 MVC Controller

c# - 在 C# 中使用位图对象查找图像格式

image - 指纹图像比较库

javascript - 如何计算圆弧起点和终点的精确点位置

javascript - 在谷歌地图中绘制特定国家的边界​​不正确