Context.maxHeader
This commit is contained in:
@@ -155,8 +155,9 @@ serviceid1_name1 serviceid1_name2 serviceid2_name1 serviceid2_name2
|
||||
lib: server额外的class目录, 默认为${APP_HOME}/libs/*;
|
||||
charset: 文本编码, 默认: UTF-8
|
||||
backlog: 默认10K
|
||||
maxconns: 最大连接数, 小于1表示无限制, 默认: 0
|
||||
maxbody: request.body最大值, 默认: 256K
|
||||
maxConns: 最大连接数, 小于1表示无限制, 默认: 0
|
||||
maxHeader: request.header最大值, 默认: 16K
|
||||
maxBody: request.body最大值, 默认: 256K
|
||||
bufferCapacity: ByteBuffer的初始化大小, TCP默认: 32K; (HTTP 2.0、WebSocket,必须要16k以上); UDP默认: 8K
|
||||
bufferPoolSize: ByteBuffer池的大小,默认: 线程数*4
|
||||
responsePoolSize: Response池的大小,默认: 1024
|
||||
|
||||
@@ -60,6 +60,9 @@ public class Context {
|
||||
// 最大连接数, 为0表示没限制
|
||||
protected int maxConns;
|
||||
|
||||
// 请求头的大小上限, 默认16K
|
||||
protected int maxHeader;
|
||||
|
||||
// 请求内容的大小上限, 默认64K
|
||||
protected int maxBody;
|
||||
|
||||
@@ -88,6 +91,7 @@ public class Context {
|
||||
config.sslContext,
|
||||
config.bufferCapacity,
|
||||
config.maxConns,
|
||||
config.maxHeader,
|
||||
config.maxBody,
|
||||
config.charset,
|
||||
config.serverAddress,
|
||||
@@ -107,6 +111,7 @@ public class Context {
|
||||
SSLContext sslContext,
|
||||
int bufferCapacity,
|
||||
final int maxConns,
|
||||
final int maxHeader,
|
||||
final int maxBody,
|
||||
Charset charset,
|
||||
InetSocketAddress address,
|
||||
@@ -123,6 +128,7 @@ public class Context {
|
||||
this.sslContext = sslContext;
|
||||
this.bufferCapacity = bufferCapacity;
|
||||
this.maxConns = maxConns;
|
||||
this.maxHeader = maxHeader;
|
||||
this.maxBody = maxBody;
|
||||
this.charset = StandardCharsets.UTF_8.equals(charset) ? null : charset;
|
||||
this.serverAddress = address;
|
||||
@@ -193,6 +199,10 @@ public class Context {
|
||||
return maxConns;
|
||||
}
|
||||
|
||||
public int getMaxHeader() {
|
||||
return maxHeader;
|
||||
}
|
||||
|
||||
public int getMaxBody() {
|
||||
return maxBody;
|
||||
}
|
||||
@@ -270,6 +280,9 @@ public class Context {
|
||||
// 字符集
|
||||
public Charset charset;
|
||||
|
||||
// 请求头的大小上限, 默认16K
|
||||
public int maxHeader;
|
||||
|
||||
// 请求内容的大小上限, 默认64K
|
||||
public int maxBody;
|
||||
|
||||
|
||||
@@ -101,6 +101,9 @@ public abstract class Server<
|
||||
// 最大连接数, 为0表示没限制
|
||||
protected int maxConns;
|
||||
|
||||
// 请求头大小的上限,单位:字节
|
||||
protected int maxHeader;
|
||||
|
||||
// 请求包大小的上限,单位:字节
|
||||
protected int maxBody;
|
||||
|
||||
@@ -131,14 +134,15 @@ public abstract class Server<
|
||||
Objects.requireNonNull(config);
|
||||
this.config = config;
|
||||
this.address = new InetSocketAddress(config.getValue("host", "0.0.0.0"), config.getIntValue("port", 80));
|
||||
this.charset = Charset.forName(config.getValue("charset", "UTF-8"));
|
||||
this.maxConns = config.getIntValue("maxconns", 0);
|
||||
this.aliveTimeoutSeconds = config.getIntValue("aliveTimeoutSeconds", 30);
|
||||
this.readTimeoutSeconds = config.getIntValue("readTimeoutSeconds", 0);
|
||||
this.writeTimeoutSeconds = config.getIntValue("writeTimeoutSeconds", 0);
|
||||
this.backlog = parseLenth(config.getValue("backlog"), 1024);
|
||||
this.charset = Charset.forName(config.getValue("charset", "UTF-8"));
|
||||
this.maxConns = config.getIntValue("maxConns", 0);
|
||||
this.maxHeader = parseLenth(config.getValue("maxHeader"), 16 * 1024);
|
||||
this.maxBody =
|
||||
parseLenth(config.getValue("maxbody"), "UDP".equalsIgnoreCase(netprotocol) ? 16 * 1024 : 256 * 1024);
|
||||
parseLenth(config.getValue("maxBody"), "UDP".equalsIgnoreCase(netprotocol) ? 16 * 1024 : 256 * 1024);
|
||||
int bufCapacity = parseLenth(
|
||||
config.getValue("bufferCapacity"),
|
||||
"UDP".equalsIgnoreCase(netprotocol) ? UDP_BUFFER_CAPACITY : 32 * 1024);
|
||||
@@ -298,10 +302,6 @@ public abstract class Server<
|
||||
return responsePoolSize;
|
||||
}
|
||||
|
||||
public int getMaxBody() {
|
||||
return maxBody;
|
||||
}
|
||||
|
||||
public int getAliveTimeoutSeconds() {
|
||||
return aliveTimeoutSeconds;
|
||||
}
|
||||
@@ -318,6 +318,14 @@ public abstract class Server<
|
||||
return maxConns;
|
||||
}
|
||||
|
||||
public int getMaxHeader() {
|
||||
return maxHeader;
|
||||
}
|
||||
|
||||
public int getMaxBody() {
|
||||
return maxBody;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void addServlet(S servlet, final Object attachment, AnyValue conf, K... mappings) {
|
||||
this.dispatcher.addServlet(servlet, attachment, conf, mappings);
|
||||
@@ -402,6 +410,13 @@ public abstract class Server<
|
||||
}
|
||||
}
|
||||
|
||||
public void changeCharset(final Charset newCharset) {
|
||||
this.charset = newCharset;
|
||||
if (this.context != null) {
|
||||
this.context.charset = newCharset;
|
||||
}
|
||||
}
|
||||
|
||||
public void changeMaxconns(final int newMaxConns) {
|
||||
this.maxConns = newMaxConns;
|
||||
if (this.context != null) {
|
||||
@@ -412,17 +427,17 @@ public abstract class Server<
|
||||
}
|
||||
}
|
||||
|
||||
public void changeCharset(final Charset newcharset) {
|
||||
this.charset = newcharset;
|
||||
public void changeMaxHeader(final int newMaxHeader) {
|
||||
this.maxHeader = newMaxHeader;
|
||||
if (this.context != null) {
|
||||
this.context.charset = newcharset;
|
||||
this.context.maxHeader = newMaxHeader;
|
||||
}
|
||||
}
|
||||
|
||||
public void changeMaxbody(final int newmaxbody) {
|
||||
this.maxBody = newmaxbody;
|
||||
public void changeMaxBody(final int newMaxBody) {
|
||||
this.maxBody = newMaxBody;
|
||||
if (this.context != null) {
|
||||
this.context.maxBody = newmaxbody;
|
||||
this.context.maxBody = newMaxBody;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,6 +475,7 @@ public abstract class Server<
|
||||
contextConfig.sslContext = this.sslContext;
|
||||
contextConfig.bufferCapacity = this.bufferCapacity;
|
||||
contextConfig.maxConns = this.maxConns;
|
||||
contextConfig.maxHeader = this.maxHeader;
|
||||
contextConfig.maxBody = this.maxBody;
|
||||
contextConfig.charset = this.charset;
|
||||
contextConfig.serverAddress = this.address;
|
||||
@@ -522,11 +538,10 @@ public abstract class Server<
|
||||
/**
|
||||
* 判断是否存在Filter
|
||||
*
|
||||
* @param <T> 泛型
|
||||
* @param filterClassName Filter类
|
||||
* @return boolean
|
||||
*/
|
||||
public <T extends Filter> boolean containsFilter(String filterClassName) {
|
||||
public boolean containsFilter(String filterClassName) {
|
||||
return this.dispatcher.containsFilter(filterClassName);
|
||||
}
|
||||
|
||||
|
||||
@@ -392,6 +392,9 @@ public class HttpRequest extends Request<HttpContext> {
|
||||
this.headerHalfLen = this.headerLength;
|
||||
}
|
||||
bytes.clear();
|
||||
if (this.headerLength > context.getMaxHeader()) {
|
||||
return -1;
|
||||
}
|
||||
if (this.contentType != null && this.contentType.contains("boundary=")) {
|
||||
this.boundary = true;
|
||||
}
|
||||
|
||||
@@ -81,6 +81,14 @@ public class SncpRequest extends Request<SncpContext> {
|
||||
+ this.headerSize);
|
||||
return -1;
|
||||
}
|
||||
if (this.headerSize > context.getMaxHeader()) {
|
||||
context.getLogger()
|
||||
.log(
|
||||
Level.WARNING,
|
||||
"sncp buffer header.length must lower " + context.getMaxHeader() + ", but "
|
||||
+ this.headerSize);
|
||||
return -1;
|
||||
}
|
||||
this.readState = READ_STATE_HEADER;
|
||||
}
|
||||
// ---------------------head----------------------------------
|
||||
|
||||
Reference in New Issue
Block a user