diff --git a/rpc/http/server.go b/rpc/http/server.go
index 452b7c9af0e70bcc67ede516e090d1494d09a0f4..d8f0157f116880a05d98af5794fa0fe0127c5097 100644
--- a/rpc/http/server.go
+++ b/rpc/http/server.go
@@ -29,6 +29,8 @@ import (
 var rpchttplogger = logger.NewLogger("RPC-HTTP")
 var JSON rpc.JsonWrapper
 
+const maxSizeReqLength = 1024 * 1024 // 1MB
+
 func NewRpcHttpServer(pipe *xeth.XEth, address string, port int) (*RpcHttpServer, error) {
 	sport := fmt.Sprintf("%s:%d", address, port)
 	l, err := net.Listen("tcp", sport)
@@ -92,6 +94,12 @@ func (s *RpcHttpServer) apiHandler(api *rpc.EthereumApi) http.Handler {
 
 		rpchttplogger.DebugDetailln("Handling request")
 
+		if req.ContentLength > maxSizeReqLength {
+			jsonerr := &rpc.RpcErrorObject{-32700, "Error: Request too large"}
+			JSON.Send(w, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr})
+			return
+		}
+
 		reqParsed, reqerr := JSON.ParseRequestBody(req)
 		if reqerr != nil {
 			jsonerr := &rpc.RpcErrorObject{-32700, "Error: Could not parse request"}