【问题标题】:Cache-Control Headers causing issues with back button导致后退按钮出现问题的缓存控制标头
【发布时间】:2017-07-14 10:04:35
【问题描述】:

我正在开发一个使用 https 连接运行 Java Struts v.1 和 WebSphere v.8.5 作为服务器的遗留应用程序。我正在尝试使应用程序在其安全性方面达到合规性。我们需要使用此应用程序完成的任务之一是在每个现有页面上添加反缓存响应标头:

Cache-Control: no-cache, no-store
Expires: 0
Pragma: no-cache

我已经设法添加了标题,尽管通过启用标题我们看到后退按钮功能在使用 HTTP POST 请求的页面中不再正常工作。我们正在为各自的浏览器显示以下页面:

IE:

网页已过期

最可能的原因:

•此网页的本地副本已过期,网站要求您重新下载。

尝试一下: 单击工具栏上的刷新按钮以重新加载页面。 刷新后,您可能需要再次导航到特定网页, 或重新输入信息。

铬:

确认重新提交表单

此网页需要您之前输入的数据才能正确显示。 您可以再次发送此数据,但这样做会重复此页面之前执行的任何操作。 按重新加载按钮重新提交加载页面所需的数据。

ERR_CACHE_MISS

如果在显示这些屏幕后刷新页面,我们将导航回最初想要的页面。

调查这个问题似乎是

cache-control : no-cache, no-store

点击后退按钮时,错误页面应归咎于标题。

因此我的问题是,如果在维护标题或添加允许用户使用后退按钮而不会从浏览器看到错误屏幕然后必须刷新页面的情况下,是否有任何解决方法.还是我只需要从缓存控制标头中排除使用 POST 调用的页面?

需要注意的几点:

-元标记被认为不足以修复此安全漏洞。 HTML Meta Tags and HTTP Headers

-我也尝试添加其他 cache-control 标头,但它们都没有解决后面的问题:

must-revalidate
age
post & pre-checks
etc...

感谢任何见解和帮助。先感谢您。

【问题讨论】:

    标签: java http security caching cache-control


    【解决方案1】:

    对于遇到相同问题的任何人,这就是我解决以下错误的方法。

    为服务器端呈现的页面实现了Post/Redirect/Get (PRG) 模型。在大多数现代框架中都可以找到此功能。一个简单的谷歌搜索将为您提供如何为您的框架执行此操作。

    除了页面之外,我不想实现 PRG 模型并想控制后退按钮事件。我最终将以下脚本与 JQuery 一起使用。

    请注意:此方法仅适用于现代浏览器,请自行决定使用。

    //Import JQuery
    <script src="jquery-1.11.0.min.js"></script>
    
    //Add this to your JS Logic for the page you want to change
    <script type="text/javascript">
      jQuery(document).ready(function($) {
        if (window.history && window.history.pushState) {
          $(window).on('popstate', function() {
            var hashLocation = location.hash;
            var hashSplit = hashLocation.split("#!/");
            var hashName = hashSplit[1];
    
            if (hashName !== '') {
              var hash = window.location.hash;
              if (hash === '') {
                document.location.href = '/Your/Redirection/Here';
              }
            }
          });
    
       window.history.pushState('forward', null, '#SomeIDYouAreNotUsing');
       }
    
     });
    </script>
    

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 2015-12-01
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多