• web.xml文件中配置ShallowEtagHeaderFilter需注意的问题


    问题现象及解决方法

    今天在Spring MVC应用中加入ShallowEtagHeaderFilter时,发现返回的响应中没有etag头,上网查了很多相关资料,也试了很多方法依然不起作用。在查看web.xml文件时,突然发现web.xml配置了UrlRewriteFilter,抱着试试看态度,将ShallowEtagHeaderFilter的“filter-mapping”调到了UrlRewriteFilter的前面,再次测试,发现返回的响应头中包含了etag字段。

    解决方法总结:

    如果在web.xml文件中已经配置UrlRewriteFilter情况下,应该将ShallowEtagHeaderFilter的filter-mapping放在UrlRewriteFilter的filter-mapping的前面,ShallowEtagHeader不起作用。
    

    ShallowEtagHeaderFilter

    ShallowEtagHeaderFilter是spring提供的支持ETag的一个过滤器,所谓ETag是指被请求变量的实体值,是一个可以与Web资源关联的记号,而Web资源可以是一个Web页,也可以是JSON或XML文档,服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端,以下是服务器端返回的格式:

    ETag:"50b1c1d4f775c61:df3"
    

    客户端的查询更新格式是这样的:

    If-None-Match: "50b1c1d4f775c61:df3"
    

    如果ETag没改变,则返回状态304然后不返回,这也和Last-Modified一样。

    ShallowEtagHeaderFilter会将JSP等的内容缓存,生成MD5的key,然后在response中作为Etage的header返回给客户端。下次客户端对相同的资源(或者说相同的url)发出请求时,客户端会将之前生成的key作为If-None-Match的值发送到server端。 Filter会客户端传来的值和服务器上的做比较,如果相同,则返回304;否则,将发送新的内容到客户端。

    ShallowEtagHeaderFilter只能节省带宽,而不能提高服务器性能。

    配置ShallowEtagHeaderFilter的代码如下:

    <filter>
        <filter-name>etagFilter</filter-name>
        <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>etagFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  • 相关阅读:
    20101016网站更新部署
    服务器内存技术知识充电
    http://code.google.com/p/pyv8/, pyv8爬虫专用
    十月创意家居,饰品行业热销货源推荐
    2010十一月份日用百货热销品货源推荐
    关于使用cookielib的一些用法
    sqlalchemy group by
    vim使用记录
    javascript insert text on cursor postion
    python网店
  • 原文地址:https://www.cnblogs.com/coderland/p/5902639.html
Copyright © 2020-2023  润新知