zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    监控注册表和文件夹改动
    Windows中根据GetLastError的错误代码,取得文字描述
    VBA 读取文件/写入文件
    (转)ansi,gb2312,gbk,gb18030,unicode,utf8,unicode big endian编码的区别及什么是BOM
    VBA 打开文件对话框
    修改GitHub记录中的invalidemailaddress
    使用DWM实现Aero Glass效果
    RAII(C++必知必会 条款40)
    C函数包装ASM代码时,指针无法传值的问题
    msysgit color.ui auto is invalid msysgit无法开启彩色显示
  • 原文地址:https://www.cnblogs.com/coderland/p/5902639.html
Copyright © 2011-2022 走看看