You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 2.13.8与Play 2.5.0环境下记录入站请求及处理414 URI过长错误并打印对应URI的方法

Scala 2.13.8与Play 2.5.0环境下记录入站请求及处理414 URI过长错误并打印对应URI的方法

嗨,我来帮你搞定这个问题!在Play 2.5.x版本里,当URI过长触发414错误时,默认情况下请求可能还没走到你的业务代码就被底层服务器(比如Netty)拦截了,所以得从过滤器(Filter)或者服务器配置这两个方向入手,下面给你详细拆解可行方案:

方案一:自定义Filter捕获并记录触发414的URI

Play的Filter机制可以在请求进入路由前/后统一处理请求和响应,咱们可以通过它来捕获所有请求的URI,哪怕是触发414的请求也能记录下来:

  1. 创建自定义Filter类:
import javax.inject.Inject
import play.api.mvc._
import play.api.Logger
import scala.concurrent.{ExecutionContext, Future}

class RequestLoggingFilter @Inject()(implicit ec: ExecutionContext) extends Filter {
  private val logger = Logger(this.getClass)

  override def apply(nextFilter: RequestHeader => Future[Result])
                    (requestHeader: RequestHeader): Future[Result] = {
    // 先记录所有入站请求的URI(包括超长的)
    logger.info(s"Incoming request URI: ${requestHeader.uri}")
    
    nextFilter(requestHeader).map { result =>
      // 如果响应是414错误,单独打一条警告日志
      if (result.header.status == 414) {
        logger.warn(s"Received HTTP 414 URI Too Long for URI: ${requestHeader.uri}")
      }
      result
    }
  }
}
  1. 注册这个Filter:
    在application.conf里添加配置,让Play加载你的过滤器:
play.http.filters = "com.yourpackage.RequestLoggingFilter"

注意哦:这个方案能记录所有请求的URI,但如果URI超长到被Netty直接拦截,那请求根本到不了Filter,这时候就得用方案二调整服务器配置了。

方案二:调整服务器最大URI长度,让请求进入业务代码

Play 2.5默认使用Netty作为底层服务器,Netty对请求行(包括URI)的长度有默认限制,咱们可以在application.conf里修改这个限制,让超长URI的请求能进入你的代码,这样你就能在控制器或者过滤器里打印它:

添加以下配置到application.conf:

# 调整Netty允许的请求行最大长度(单位:字节),默认是4096,这里改成8192可以容纳更长的URI
play.server.netty.maxInitialLineLength = 8192

调整完配置后,重启应用,这时候超长URI的请求就会进入你的Filter或者控制器,你可以直接通过request.uri获取并打印。

⚠️ 小提醒:调大这个值要权衡安全风险,过长的URI可能被用于DoS攻击,建议根据你的业务场景设置合理的最大值,不要盲目调得太大。

额外小技巧

如果只是想临时调试,也可以在Play的日志配置里开启Netty的调试日志,不过这个日志会比较杂,不太推荐长期使用:

logger.play.server.netty = DEBUG

备注:内容来源于stack exchange,提问作者muhammed ozbilici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:44:36