在javascript中
const image = new Image()
image.crossOrigin = 'Anonymous'
image.src = 'https://s3.amazonaws.com/ch-static-beta/avatar/user/1a8fdd22d5ec11e784da0e28350150f71512059569.png'
答案 0 :(得分:10)
这是一个缓存问题,and a chrome bug *:
*关闭为WONT-FIX,chrome devs表示它本身不是一个bug,它是服务器的错误配置,应该将allow origin标头发送给任何请求......相关的{{3} },也关闭为WONT-FIX。
您可能已经在不请求CORS标头的情况下向此图像发出过请求。
当您执行第二个请求时,浏览器错误地重用缓存的响应。
var rand = '?'+Math.random();
var no_cors = new Image();
no_cors.onload = loadCORS;
no_cors.src = 'https://s3.amazonaws.com/ch-static-beta/avatar/user/1a8fdd22d5ec11e784da0e28350150f71512059569.png' + rand;
function loadCORS(){
var with_cors = new Image();
with_cors.crossOrigin = 'anonymous';
with_cors.src = no_cors.src;
with_cors.onload = function(){console.log('loaded');};
with_cors.onerror = function(){console.error('failed');};
}
因此,对于修复:[...] 配置S3,使其始终发送跨源标头。 *
要解决此问题,请始终加载crossOrigin版本
对于临时修复,请禁用缓存。
*似乎无法设置S3来执行此操作,请参阅bug report this excellent answer,这也提供了其他服务器端解决方法。