Akka-http非法请求标头

zax*_*xme 1 scala akka-http

我公开了一个简单的终结点,该终结点包含两个查询参数。当我在本地测试代码时,我没有任何问题。但是当部署到产品时,我会看到以下消息:

a.a.ActorSystemImpl Illegal request header: Illegal 'cookie' header: Invalid input '/', expected tchar, '\r', WSP or '=' (line 1, column 186): ...
Run Code Online (Sandbox Code Playgroud)

如您所见,我没有进行任何Cookie解析

import akka.actor.{ActorSystem, Props}
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Sink

object MainApp extends App {
  implicit val system = ActorSystem()
  implicit val materializer = ActorMaterializer()

  private val config = system.settings.config

  private val server = Http().bind(config.getString("akka.http.server.interface"), config.getInt("akka.http.server.port"))

  private val route = {
    path("replay") {
      get {
        parameters("fromDate", "toDate") { (fromDate, toDate) =>
          complete {
            <some other code>
          }
        }
      }
    }
  }

  val bindingFuture = server.to(Sink.foreach {
    connection =>
      connection handleWith route
  }).run()
}
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激!

cmb*_*ter 5

您将收到一个非法的请求标头异常,因此调用端点(发出请求)的任何行为都会向您传递该非法的Cookie标头值。它与此请求处理代码无关。简而言之,“不是你,是他们”。

只要请求本身是有效的(除了这个错误的头),那么处理就应该继续(它是非终止的)。您可以尝试找出问题所在,并加以解决,以消除该警告消息。如果他们向您传递了cookie,则可能希望您能够正确接收它并使用它。如果这不是一个选项,则可以将以下配置设置添加到actor系统:

akka.http.server.parsing.illegal-header-warnings = on
Run Code Online (Sandbox Code Playgroud)

如果您无法解决根本问题,那将为您消除该警告。

  • 更好的解决方案可能不是取消警告(因为它可能指定您实际依赖的标头无效),而是包含您可以安全忽略的标头警告列表,例如`ignore-illegal-header-for = ['用户代理']` (4认同)