在不缓存跨域的情况下获取图像或其标题

时间:2014-05-25 07:29:38

标签: javascript jquery caching cors browser-cache

我正在尝试检索图像的大小而不缓存它(出于正当理由)或获取其Content-Length标题而不下载图像本身。我需要这些信息来匹配远程图像与控件(如果有另一种方法来实现这些约束,我都是耳朵)。 服务器不受我的控制。以下是我为此所做的尝试:

  1. 使用此脚本,我可以轻松获取图像,但无法阻止其缓存:

    var img = new Image();
    img.src  = 'http://www.nasa.gov/sites/default/themes/NASAPortal/images/nasa-logo.gif';
    
  2. 有了这个,我在调试器中得到了标题,但我无法访问它们:

    $.ajax({
        url: 'http://www.nasa.gov/sites/default/themes/NASAPortal/images/nasa-logo.gif',
        type: 'HEAD',
        success: function(data){
            console.log(data);
        }
    });
    
  3. 有了这个,我得到的图像没有缓存,但我无法访问其属性:

    <iframe src="http://www.nasa.gov/sites/default/themes/NASAPortal/images/nasa-logo.gif"></iframe>
    
  4. 我已尝试过每个JSONP组合,包括convertersdataFilter但没有成功。

  5. 我已经探索过只下载图像的前n个字节的可能性(这样缓存不会成为问题),但只有AJAX可能会阻止尝试,因为它是交叉的域名和JSONP似乎也不起作用。

  6. 总之,我已经尝试了所有我能阅读和思考的东西......我花了最后48小时(和数百个小提琴)寻找解决方案。我一直有这种感觉,应该有办法......

    我错过了什么?

3 个答案:

答案 0 :(得分:1)

如何添加查询字符串以避免缓存

var img  = new Image();
var rand = (new Date()).getTime();;

img.src  = 'http://www.nasa.gov/ ... /images/nasa-logo.gif?r=' + rand ;

答案 1 :(得分:0)

您可以使用以下响应标头提供图像:

缓存控制:无缓存,无存储

这将阻止浏览器缓存它,包括代理服务器。

答案 2 :(得分:-1)

你可以获得系统毫秒并在网址末尾添加&#39;?time =&#39; +毫秒,大多数http缓存基于网址作为密钥,因此您可以获得新的图像每个请求