【发布时间】:2021-10-04 22:24:07
【问题描述】:
我查看了所有建议,并尝试将最大内容大小值设置为较小 (700),以证明我可以更改它。码头 9.4.41。
当我发送这样的 POST 时:
0000: POST /data1/MaxRequestSize/MyTryURL01 HTTP/1.1\r\n
0030: Accept: application/xml,application/atom+xml\r\n
005E: User-Agent: xxxxxxxxxxx\r\n
0077: Content-Type: application/atom+xml; charset=utf-8\r\n
00AA: Host: localhost:9090\r\n
00C0: Connection: keep-alive\r\n
00D8: Content-Length: 808\r\n
00ED: \r\n
...
我没有收到任何错误(即 808 > 700)。
提取我的服务器启动代码:
HandlerCollection handlers = new HandlerCollection();
System.setProperty( "org.eclipse.jetty.server.Request.maxFormContentSize", "700" ); /**1**/
server = new Server();
server.setHandler( handlers );
server.setAttribute( "org.eclipse.jetty.server.Request.maxFormContentSize", 700 ); /**2**/
// Setting up connection
ServerConnector serverConn = null;
HttpConfiguration httpConfig = new HttpConfiguration();
httpConfig.setSendServerVersion( false );
httpConfig.setSendXPoweredBy( false );
HttpConnectionFactory hcf = new HttpConnectionFactory( httpConfig );
serverConn = new ServerConnector( server, hcf );
server.addConnector( serverConn );
serverConn.setPort( httpPort );
serverConn.setName( Constants.CONF_HTTP_CONNECTOR );
serverConn.setReuseAddress( true );
// Initializing servlets
contextHandlers = new ContextHandlerCollection();
ServletHolder[] holders = new ServletHolder[ 1 ];
ServletHolder holder = new ServletHolder( myServlet );
holder.setInitParameter( ... );
ServletContextHandler handler = new ServletContextHandler();
handler.setMaxFormContentSize( 700 ); /**3**/
handler.setContextPath( servicePath );
handler.setAllowNullPathInfo( true );
connectors = new String[ 2 ];
connectors[0] = "@" + Constants.CONF_HTTP_CONNECTOR;
connectors[1] = "@" + Constants.CONF_ADMIN_CONNECTOR;
handler.setVirtualHosts( connectors );
handler.setDisplayName( "foo" );
handler.addServlet( holder, "/*" );
contextHandlers.addHandler( handler );
// Launching
handlers.addHandler( contextHandlers );
server.start();
任何建议表示赞赏。
【问题讨论】:
-
我查看了 Jetty 代码,ContextHandler 实际上使用 Integer.getInteger(MAX_FORM_CONTENT_SIZE_KEY, DEFAULT_MAX_FORM_CONTENT_SIZE);在实例初始化期间。因此 /**1**/ 应该可以工作。
-
如果您有
multipart/form-data内容,则使用 servlet 规范MultipartConfigElement来配置最大大小。
标签: jetty embedded-jetty