2017-02-23 115 views
0

我正在使用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调用的页面从拥有缓存控制头文件中排除?

有几件事情需要注意:

-Meta标签被认为不足以修复这个安全漏洞。HTML Meta Tags and HTTP Headers

-I也尝试添加其他缓存控制头,但没有人在解决问题回来工作:

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

我明白任何见解和帮助。先谢谢你。

回答

0

对于任何人有同样的问题,这是我如何解决以下错误。

为服务器端渲染的页面实现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>