关于http的几个拦截器设置

1. 防止用户使用回退按钮时,页面不会重新加载

//1、控制浏览器禁止缓存当前文档内容
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); //不直接使用缓存,要求向服务器发起(新鲜度校验)请求(非代理服务器的缓存)

response.setHeader("Pragma", "no-cache"); 

HTTP 1.0. response.setHeader("Expires", "0"); 

2.防止盗链

  def referer = request.getHeader("Referer")//获取来访者地址。只有通过链接访问当前页的时候,才能获取上一页的地址;
  if (!(referer && targetUriAllowed(referer))) {
      log.warn("Invalid Referer:${referer}")
      throw new RuntimeException("系统繁忙!")
  }
  params.targetUri = secureTargetUri(params.targetUri)

  if (!targetUriAllowed(params.targetUri)) {
        log.warn("Invalid targetUri:${params.targetUri}")
        params.targetUri = defaultPath()
  }


  def targetUriAllowed(targetUri) {
        def host = request.getHeader("Host")
        if (targetUri.startsWith("/")) {
            return true
        } else {
            targetUri = targetUri.replaceAll("http://", "").replaceAll("https://", "")
            if (!host?.contains(".")) {
                //nginx forwarded request, safe
                return true
            }
            if (targetUri.startsWith(host)) {
                return true
            }
        }
        return false
    }


  def secureTargetUri(def targetUri) {
        def start = targetUri.indexOf("?")
        if (start > 0) {
            def urlString = StringEscapeUtils.escapeHtml4(targetUri.substring(0, start))
            def paramString = targetUri.substring(start + 1)
            def newParamsString = paramString.split("&").collect {
                StringEscapeUtils.escapeHtml4(it)
            }.join("&")
            return urlString + "?" + newParamsString
        }
        return StringEscapeUtils.escapeHtml4(targetUri)
    }

3.response的一些设置

(1)在对 preflight request.(预检请求)的应答中明确了客户端所要访问的资源允许使用的方法或方法列表。

Access-Control-Request-Method: POST

(2)X-Content-Type-Options: nosniff 响应首部相当于一个提示标志,被服务器用来提示客户端一定要遵循Content-Type 首部中对  MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIME 类型嗅探行为,换句话说,也就是意味着网站管理员确定自己的设置没有问题。

注意: nosniff 只应用于 "script" 和 "style" 两种类型。事实证明,将其应用于图片类型的文件会导致与现有的站点冲突

项目中遇到图片content-type为stream,在IE下无法显示的问题,就是因为此属性的设置造成的。

(3)X-Frame-Options有三个值:

 DENY

   表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

 SAMEORIGIN

   表示该页面可以在相同域名页面的 frame 中展示。

 ALLOW-FROM uri

   表示该页面可以在指定来源的 frame 中展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值