forked from TrueCloudLab/neoneo-go
confi: add MaxRequestHeaderBytes RPC configuration option
A part of #3131, follow the notion of https://github.com/neo-project/neo-modules/pull/827, but don't restrict request line size due to https://github.com/golang/go/issues/15494. Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
This commit is contained in:
parent
802d8d24b9
commit
d511f6e5a9
4 changed files with 34 additions and 19 deletions
|
@ -188,6 +188,7 @@ RPC:
|
||||||
MaxFindStoragePageSize: 50
|
MaxFindStoragePageSize: 50
|
||||||
MaxNEP11Tokens: 100
|
MaxNEP11Tokens: 100
|
||||||
MaxRequestBodyBytes: 5242880
|
MaxRequestBodyBytes: 5242880
|
||||||
|
MaxRequestHeaderBytes: 1048576
|
||||||
MaxWebSocketClients: 64
|
MaxWebSocketClients: 64
|
||||||
SessionEnabled: false
|
SessionEnabled: false
|
||||||
SessionExpirationTime: 15
|
SessionExpirationTime: 15
|
||||||
|
@ -228,6 +229,8 @@ where:
|
||||||
`getnep11balances` call.
|
`getnep11balances` call.
|
||||||
- `MaxRequestBodyBytes` - the maximum allowed HTTP request body size in bytes
|
- `MaxRequestBodyBytes` - the maximum allowed HTTP request body size in bytes
|
||||||
(5MB by default).
|
(5MB by default).
|
||||||
|
- `MaxRequestHeaderBytes` - the maximum allowed HTTP request header size in bytes
|
||||||
|
(1MB by default).
|
||||||
- `MaxWebSocketClients` - the maximum simultaneous websocket client connection
|
- `MaxWebSocketClients` - the maximum simultaneous websocket client connection
|
||||||
number (64 by default). Attempts to establish additional connections will
|
number (64 by default). Attempts to establish additional connections will
|
||||||
lead to websocket handshake failures. Use "-1" to disable websocket
|
lead to websocket handshake failures. Use "-1" to disable websocket
|
||||||
|
|
|
@ -3,6 +3,7 @@ package config
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -33,6 +34,9 @@ const (
|
||||||
// DefaultMaxRequestBodyBytes is the default maximum allowed size of HTTP
|
// DefaultMaxRequestBodyBytes is the default maximum allowed size of HTTP
|
||||||
// request body in bytes.
|
// request body in bytes.
|
||||||
DefaultMaxRequestBodyBytes = 5 * 1024 * 1024
|
DefaultMaxRequestBodyBytes = 5 * 1024 * 1024
|
||||||
|
// DefaultMaxRequestHeaderBytes is the maximum permitted size of the headers
|
||||||
|
// in an HTTP request.
|
||||||
|
DefaultMaxRequestHeaderBytes = http.DefaultMaxHeaderBytes
|
||||||
)
|
)
|
||||||
|
|
||||||
// Version is the version of the node, set at the build time.
|
// Version is the version of the node, set at the build time.
|
||||||
|
|
|
@ -17,6 +17,7 @@ type (
|
||||||
MaxFindStorageResultItems int `yaml:"MaxFindStoragePageSize"`
|
MaxFindStorageResultItems int `yaml:"MaxFindStoragePageSize"`
|
||||||
MaxNEP11Tokens int `yaml:"MaxNEP11Tokens"`
|
MaxNEP11Tokens int `yaml:"MaxNEP11Tokens"`
|
||||||
MaxRequestBodyBytes int `yaml:"MaxRequestBodyBytes"`
|
MaxRequestBodyBytes int `yaml:"MaxRequestBodyBytes"`
|
||||||
|
MaxRequestHeaderBytes int `yaml:"MaxRequestHeaderBytes"`
|
||||||
MaxWebSocketClients int `yaml:"MaxWebSocketClients"`
|
MaxWebSocketClients int `yaml:"MaxWebSocketClients"`
|
||||||
SessionEnabled bool `yaml:"SessionEnabled"`
|
SessionEnabled bool `yaml:"SessionEnabled"`
|
||||||
SessionExpirationTime int `yaml:"SessionExpirationTime"`
|
SessionExpirationTime int `yaml:"SessionExpirationTime"`
|
||||||
|
|
|
@ -267,25 +267,6 @@ var rpcWsHandlers = map[string]func(*Server, params.Params, *subscriber) (any, *
|
||||||
// untyped nil or non-nil structure implementing OracleHandler interface.
|
// untyped nil or non-nil structure implementing OracleHandler interface.
|
||||||
func New(chain Ledger, conf config.RPC, coreServer *network.Server,
|
func New(chain Ledger, conf config.RPC, coreServer *network.Server,
|
||||||
orc OracleHandler, log *zap.Logger, errChan chan<- error) Server {
|
orc OracleHandler, log *zap.Logger, errChan chan<- error) Server {
|
||||||
addrs := conf.Addresses
|
|
||||||
httpServers := make([]*http.Server, len(addrs))
|
|
||||||
for i, addr := range addrs {
|
|
||||||
httpServers[i] = &http.Server{
|
|
||||||
Addr: addr,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var tlsServers []*http.Server
|
|
||||||
if cfg := conf.TLSConfig; cfg.Enabled {
|
|
||||||
addrs := cfg.Addresses
|
|
||||||
tlsServers = make([]*http.Server, len(addrs))
|
|
||||||
for i, addr := range addrs {
|
|
||||||
tlsServers[i] = &http.Server{
|
|
||||||
Addr: addr,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protoCfg := chain.GetConfig().ProtocolConfiguration
|
protoCfg := chain.GetConfig().ProtocolConfiguration
|
||||||
if conf.SessionEnabled {
|
if conf.SessionEnabled {
|
||||||
if conf.SessionExpirationTime <= 0 {
|
if conf.SessionExpirationTime <= 0 {
|
||||||
|
@ -317,6 +298,10 @@ func New(chain Ledger, conf config.RPC, coreServer *network.Server,
|
||||||
conf.MaxRequestBodyBytes = config.DefaultMaxRequestBodyBytes
|
conf.MaxRequestBodyBytes = config.DefaultMaxRequestBodyBytes
|
||||||
log.Info("MaxRequestBodyBytes is not set or wong, setting default value", zap.Int("MaxRequestBodyBytes", config.DefaultMaxRequestBodyBytes))
|
log.Info("MaxRequestBodyBytes is not set or wong, setting default value", zap.Int("MaxRequestBodyBytes", config.DefaultMaxRequestBodyBytes))
|
||||||
}
|
}
|
||||||
|
if conf.MaxRequestHeaderBytes <= 0 {
|
||||||
|
conf.MaxRequestHeaderBytes = config.DefaultMaxRequestHeaderBytes
|
||||||
|
log.Info("MaxRequestHeaderBytes is not set or wong, setting default value", zap.Int("MaxRequestHeaderBytes", config.DefaultMaxRequestHeaderBytes))
|
||||||
|
}
|
||||||
if conf.MaxWebSocketClients == 0 {
|
if conf.MaxWebSocketClients == 0 {
|
||||||
conf.MaxWebSocketClients = defaultMaxWebSocketClients
|
conf.MaxWebSocketClients = defaultMaxWebSocketClients
|
||||||
log.Info("MaxWebSocketClients is not set or wrong, setting default value", zap.Int("MaxWebSocketClients", defaultMaxWebSocketClients))
|
log.Info("MaxWebSocketClients is not set or wrong, setting default value", zap.Int("MaxWebSocketClients", defaultMaxWebSocketClients))
|
||||||
|
@ -329,6 +314,28 @@ func New(chain Ledger, conf config.RPC, coreServer *network.Server,
|
||||||
if conf.EnableCORSWorkaround {
|
if conf.EnableCORSWorkaround {
|
||||||
wsOriginChecker = func(_ *http.Request) bool { return true }
|
wsOriginChecker = func(_ *http.Request) bool { return true }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addrs := conf.Addresses
|
||||||
|
httpServers := make([]*http.Server, len(addrs))
|
||||||
|
for i, addr := range addrs {
|
||||||
|
httpServers[i] = &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
MaxHeaderBytes: conf.MaxRequestHeaderBytes,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var tlsServers []*http.Server
|
||||||
|
if cfg := conf.TLSConfig; cfg.Enabled {
|
||||||
|
addrs := cfg.Addresses
|
||||||
|
tlsServers = make([]*http.Server, len(addrs))
|
||||||
|
for i, addr := range addrs {
|
||||||
|
tlsServers[i] = &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
MaxHeaderBytes: conf.MaxRequestHeaderBytes,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Server{
|
return Server{
|
||||||
http: httpServers,
|
http: httpServers,
|
||||||
https: tlsServers,
|
https: tlsServers,
|
||||||
|
|
Loading…
Reference in a new issue