Hi Seratch 馃檶
I have attempted to increase jetty max "requestHeaderSize" but failed until I created a custom JettyLauncher.
Failed attempts:
web.xml:
<context-param>
<param-name>org.eclipse.jetty.server.Request.maxHeaderSize</param-name>
<param-value>16384</param-value>
</context-param>
<context-param>
<param-name>org.eclipse.jetty.server.HttpConfiguration.headerBufferSize</param-name>
<param-value>16384</param-value>
</context-param>
<context-param>
<param-name>org.eclipse.jetty.server.HttpConfiguration.requestHeaderSize</param-name>
<param-value>16384</param-value>
</context-param>
java jar start command:
java -Dorg.eclipse.jetty.server.HttpConfiguration.requestHeaderSize=40000 -jar /app.jar
Eventually I got it working by basically copy-pasting skinny.standalone.JettyServer (https://github.com/skinny-framework/skinny-micro/blob/master/micro-server/src/main/scala/skinny/standalone/JettyServer.scala) and modifying it very slightly to configure the requestHeaderSize:
import org.eclipse.jetty.server.{HttpConnectionFactory, Server, ServerConnector}
import org.eclipse.jetty.servlet.DefaultServlet
import org.eclipse.jetty.webapp.WebAppContext
import skinny.micro.SkinnyListener
import skinny.standalone.JettyServer
import javax.servlet.ServletContextListener
object CustomJettyLauncher extends JettyServer {
def main(args: Array[String]): Unit = {
start()
server.join()
}
override def start(): Unit = {
refreshServer()
logger.info(s"Starting Jetty server on port ${port}")
val context = new WebAppContext()
val contextPath = sys.env.get("SKINNY_PREFIX").orElse(getEnvVarOrSysProp("skinny.prefix")).getOrElse("/")
context.setContextPath(contextPath)
context.setWar({
val domain = this.getClass.getProtectionDomain
val location = domain.getCodeSource.getLocation
location.toExternalForm
})
context.addEventListener(listener)
context.addServlet(classOf[DefaultServlet], "/")
server.setHandler(context)
// Set the request header size
server.getConnectors()(0).asInstanceOf[ServerConnector]
.getConnectionFactory(classOf[HttpConnectionFactory])
.getHttpConfiguration
.setRequestHeaderSize(40000)
server.start()
logger.info(s"Started Jetty server on port ${port}")
}
private[this] var server: Server = _
private[this] var listener: ServletContextListener = new SkinnyListener
private[this] var _port: Int = {
// PORT: Heroku default env variable
Option(System.getenv("PORT")).map(_.toInt).getOrElse(8080)
}
private[this] def port: Int = {
val port = sys.env.get("SKINNY_PORT").orElse(getEnvVarOrSysProp("skinny.port")).map(_.toInt).getOrElse(_port)
port
}
private[this] def newServer(port: Int): Server = new Server(port)
private[this] def refreshServer(): Unit = {
if (server != null) {
stop()
server.destroy()
server.synchronized {
server = newServer(port)
}
} else {
server = newServer(port)
}
}
private[this] def getEnvVarOrSysProp(key: String): Option[String] = {
sys.env.get(key).orElse(sys.props.get(key))
}
}
Do you know of any cleaner way to do this?
Hi Seratch 馃檶
I have attempted to increase jetty max "requestHeaderSize" but failed until I created a custom JettyLauncher.
Failed attempts:
web.xml:java jar start command:
Eventually I got it working by basically copy-pasting
skinny.standalone.JettyServer(https://github.com/skinny-framework/skinny-micro/blob/master/micro-server/src/main/scala/skinny/standalone/JettyServer.scala) and modifying it very slightly to configure the requestHeaderSize:Do you know of any cleaner way to do this?