mirror of
https://github.com/aykhans/sarin.git
synced 2026-10-16 14:43:53 +00:00
fix: report one error text when a response body is too large
This commit is contained in:
4 files changed
+8
-3
No files matched your search
@@ -177,7 +177,7 @@ The value is a whole number of bytes, with or without a unit: `B`, `KB`, `MB`, `
|
|||||||
|
|
||||||
**Examples:** `1048576`, `10MiB`, `2MB`, `512KiB`
|
**Examples:** `1048576`, `10MiB`, `2MB`, `512KiB`
|
||||||
|
|
||||||
A server can declare a `Content-Length` far larger than it sends, and the body is allocated from that declared length, so without a limit a single response can exhaust memory. A response above the limit fails with `body size exceeds the given limit` and is counted like any other error.
|
A server can declare a `Content-Length` far larger than it sends, and the body is allocated from that declared length, so without a limit a single response can exhaust memory. A response above the limit fails with `response body exceeds the body limit` and is counted like any other error.
|
||||||
|
|
||||||
The limit applies per response in flight, and a declared Content-Length is allocated up to it, so the worst case is a few times the limit times the concurrency. It covers the requests scripts make as well.
|
The limit applies per response in flight, and a declared Content-Length is allocated up to it, so the worst case is a few times the limit times the concurrency. It covers the requests scripts make as well.
|
||||||
|
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ func (c *scriptHTTPClient) Do(r *script.HTTPRequest) (*script.HTTPResponse, erro
|
|||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, fasthttp.ErrBodyTooLarge) {
|
if errors.Is(err, fasthttp.ErrBodyTooLarge) {
|
||||||
err = types.ErrScriptHTTPBodyTooLarge
|
err = types.ErrResponseBodyTooLarge
|
||||||
}
|
}
|
||||||
return nil, types.NewScriptHTTPRequestError(r.Method, r.URL, err)
|
return nil, types.NewScriptHTTPRequestError(r.Method, r.URL, err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,10 @@ func statusCodeToString(code int) string {
|
|||||||
|
|
||||||
// responseErrorKey drops the local address, whose port would mint a stats entry per connection.
|
// responseErrorKey drops the local address, whose port would mint a stats entry per connection.
|
||||||
func responseErrorKey(err error) string {
|
func responseErrorKey(err error) string {
|
||||||
|
if errors.Is(err, fasthttp.ErrBodyTooLarge) {
|
||||||
|
return types.ErrResponseBodyTooLarge.Error()
|
||||||
|
}
|
||||||
|
|
||||||
message := err.Error()
|
message := err.Error()
|
||||||
|
|
||||||
var opErr *net.OpError
|
var opErr *net.OpError
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
ErrRemoteFileTooLarge = errors.New("remote file exceeds " + FormatByteSize(RemoteFetchLimit))
|
ErrRemoteFileTooLarge = errors.New("remote file exceeds " + FormatByteSize(RemoteFetchLimit))
|
||||||
|
|
||||||
|
ErrResponseBodyTooLarge = errors.New("response body exceeds the body limit")
|
||||||
)
|
)
|
||||||
|
|
||||||
type FieldParseError struct {
|
type FieldParseError struct {
|
||||||
@@ -415,7 +417,6 @@ var (
|
|||||||
ErrScriptHTTPMethodEmpty = errors.New("http method cannot be empty")
|
ErrScriptHTTPMethodEmpty = errors.New("http method cannot be empty")
|
||||||
ErrScriptHTTPURLInvalid = errors.New("URL must be an absolute http or https URL")
|
ErrScriptHTTPURLInvalid = errors.New("URL must be an absolute http or https URL")
|
||||||
ErrScriptHTTPUnknownOption = errors.New("unknown option")
|
ErrScriptHTTPUnknownOption = errors.New("unknown option")
|
||||||
ErrScriptHTTPBodyTooLarge = errors.New("response body exceeds the body limit")
|
|
||||||
ErrScriptJSONCycle = errors.New("cannot encode a table that contains itself")
|
ErrScriptJSONCycle = errors.New("cannot encode a table that contains itself")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user