一、主要实现

以下是关于根据图片路径url,来获取图片大小的。基本原理是创建一个 GET HTTP Request类型的ajax请求。网上有种说法是利用HEAD HTTP Request 这种请求用于获取请求所隐含的URL的元信息,而不在响应中传输其任何内容。实际应用中发现其实不可用,在某些未知情况下,通过HEAD HTTP Request 获得的Content-Length比实际的要小。

//js如何获取response header信息

//利用jQuery的ajax请求来完成对head的请求,然后逐个取得需要的信息,
$.ajax({
    type: 'get', //不要使用head类型,某些情况content-length比实际要小
    url : window.location.href,
    async:false,//看自己业务,这里设置同步请求
    cache:false,//不使用缓存,每次都会向服务器请求。这个比较重要,因为浏览器会缓存图片,请求缓存的图片,xhr.getAllResponseHeaders()根本拿不到值
    complete: function( xhr,data ){
        // 获取相关Http Response header
        var wpoInfo = {
            // 服务器端时间
            "date" : xhr.getResponseHeader('Date'),
            // 如果开启了gzip,会返回这个东西
            "contentEncoding" : xhr.getResponseHeader('Content-Encoding'),
            // keep-alive ? close?
            "connection" : xhr.getResponseHeader('Connection'),
            // 响应长度
            "contentLength" : xhr.getResponseHeader('Content-Length'),
            // 服务器类型,apache?lighttpd?
            "server" : xhr.getResponseHeader('Server'),
            "vary" : xhr.getResponseHeader('Vary'),
            "transferEncoding" : xhr.getResponseHeader('Transfer-Encoding'),
            // text/html ? text/xml?
            "contentType" : xhr.getResponseHeader('Content-Type'),
            "cacheControl" : xhr.getResponseHeader('Cache-Control'),
            // 生命周期?
            "exprires" : xhr.getResponseHeader('Exprires'),
            "lastModified" : xhr.getResponseHeader('Last-Modified')
        };
        // 在这里,做想做的事。。。
    }
});

二、为什么一些字段获取不到值?

明明response header里面有好多值,但是为什么就是获取不到呢?可能原因是因为:Access-Control-Expose-Headers。请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在server端设置Access-Control-Expose-Headers,在里面指定。

三、访问外部图片资源要配置跨域

怎么配置跨域问题,我就不延伸了。百度一下Access-Control-Allow-Origin。

我这里记录一下在ajax请求阿里云oss的图片资源时遇到的一个坑。背景是阿里云oss控制台的配置跨域配置完全正确,但是客户端却总是提示:No 'Access-Control-Allow-Origin' header is present·····的错误。这不就是提示后台没有返回Access-Control-Allow-Origin吗?各种查资料之后发现,真正原因是被浏览器缓存命中了,导致异常。清除浏览器历史所有缓存,再访问测试就ok了

javascript获取response数据 js获取response header_Access