我所有的浏览器都没有发送origin报头
all of my browsers are not sending the origin header
我正在尝试将图像加载到画布元素中,然后在toDataURL()中取出数据。
我有我的网站运行Ruby on Rails 2.3
我有我的图像从aws s3服务。我已经设置好了:
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我有一个canvas元素:
<canvas id="explain_canvas"></canvas>
好的,一些背景。我最初尝试这样的代码,其中drawing_image只是一个url到图像。
var outlineImage = new Image();
outlineImage.crossOrigin = '';
outlineImage.src = drawing_image;
outlineImage.onload = function() {
var canvas = document.getElementById('explain_canvas');
var context = canvas.getContext("2d");
context.drawImage(outlineImage, 10, 10, 600, 150);
}
但这并不是在发送源报头。所以我想我会尝试通过jquery ajax调用
var outlineImage = new Image();
$(outlineImage).attr('crossOrigin', '');
$.ajax({
type: 'get',
url : drawing_image,
contentType: 'image/png',
crossDomain: 'true',
success: function() {
$(outlineImage).attr("src", drawing_image);
},
error: function() {
console.log('ah crap');
}
});
outlineImage.onload = function() {
var canvas = document.getElementById('explain_canvas');
var context = canvas.getContext("2d");
context.drawImage(outlineImage, 10, 10, 600, 150);
}
但仍然没有运气。我错了吗?jquery ajax应该发送源头吗?
我查看请求头,这是我在图像上得到的:
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:em2-images.s3.amazonaws.com
Referer:http://localhost:3000/courses/18/quizzes/22/take
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11
jquery的错误是:
XMLHttpRequest cannot load http://em2-images.s3.amazonaws.com/EM2_LF_A_5_item6.png. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
ah crap
对我来说奇怪的是,jquery声明了来源,但它不在请求头中。
这个stackoverflow问题在这里表示他想要删除origin头。他做了和我一样的调用jquery ajax并得到它。知道我为什么没有吗?
如果我重新加载页面,它会抓取缓存的图像并很好地加载它(请注意,带有origin标头),并调用toDataURL()。在我清除缓存后,它将再次无法工作,直到第一次加载图像缓存。
我开始怀疑Rails是否对它做了一些事情,但我不知道它是如何做到的,因为这是一个ajax调用。但是谁知道呢,有人知道Rails能不能做到这一点吗?
我已经在不同平台上的几个浏览器中尝试过了。Chrome, Firefox, Safari, ie910. 在我的Mac, PC和iPhone上。没有骰子。
-谢谢,
在绞尽脑汁之后,我终于弄明白了为什么我的浏览器不发送起源头。
首先介绍一下背景。这是LMS的试题,也是测试的一部分。当老师编写测试时,他们会将问题文本和图像添加到绘图画布中,让学生用图画解释他们的答案。
您可以猜到,该图像首先被加载。它对学生视图是隐藏的,我从图像中抓取src url,并尝试使用javascript将其放入canvas元素。
问题是第一次加载图像时,它没有加载crossorigin属性。因此没有原点报头。当canvas元素试图加载图像时,它被缓存了,没有origin标头。而当它试图让人行动起来的时候,它就会受阻。在我看来,也许这是一个所有浏览器都需要修复的bug。但也许不是。
所以在一个简单的例子中,当做cors时,确保第一次加载图像是带有一个cross - origin属性,以获得包含的origin头。大调的我…
是时候重构了…
我正在得到这个CORS错误,并且在服务器端没有发送源标头。
我的问题是,我已经设置了crossOrigin = Anonymous
在我的图像标签。删除它为我解决了问题,并且CORS错误消失了。
- 如何解决Access Control Allow Origin错误
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- Angularjs http.get() Cross-Origin 请求被阻止
- 当张贴到数据库时,I'我得到了一个“;可以't在它们被发送错误之后设置报头”;
- Cross Origin Chrome Extension
- Angular Cross Origin Request CORS失败,但节点http.get()成功返回
- XMLHttpRequest : 不被 access-control-allow-origin 所允许
- XMLHttpRequest无法加载url Origin访问控制允许Origin不允许null
- 可以在Access Control Allow Origin中指定端口
- Access Control Allow Origin阻止我访问google api,尽管使用了dataType:
- JSONP跨原点错误'不存在Access Control Allow Origin标头'
- 角度:原点http://localhost在Access Control Allow Origin标头中找不到
- 通过php访问控制允许Origin服务器端
- Jquery以使用WCF.错误:XMLHttpRequest无法加载Origin.访问控制允许Origin不允许null
- 在nodejs和origin ajax中使用jsonp
- 哪个服务器需要返回Access-Control-Allow-Origin报头
- Web API CORS没有返回正确的Access-Control-Allow-Origin报头
- 我所有的浏览器都没有发送origin报头
- Node/Expressjs '没有Access-Control-Allow-Origin报头'Twit