Commit Graph

348 Commits

Author SHA1 Message Date
Oleksandr Redko 498a814fbf test: fix typos in function, error message, comment (#1512) 2023-03-06 16:55:21 +01:00
Oleksandr Redko 9230a3dd7a docs: Deprecate ErrAlreadyServing as never returning (#1491) 2023-02-13 10:44:47 +08:00
Oleksandr Redko e15a810a98 docs: fix grammar issues and typos in comments (#1492) 2023-02-13 10:43:44 +08:00
Oleksandr Redko 934f04e330 Refactor golangci-lint config and remove redundant nolints (#1486)
* Refactor golangci-lint config

- Use golangci-lint-action for GitHub workflow.
- Add additional golangci-lint run options.
- Remove unused nolint directives.

* Revert exclude-use-default option
2023-02-11 15:35:15 +08:00
Oleksandr Redko c0c5f9cd38 doc,test: correct typos (#1484) 2023-02-09 09:29:28 +01:00
Sergey Ponomarev 434022b461 server.go Simplify default Server name logic (#1467)
The serverName atomic.Value field is used as a cache. This is not needed and logic can be simplified.
See related #1458
2023-01-06 04:55:09 +01:00
kinggo c637221c5f optimize: allow http head when use getonly (#1456) 2022-12-25 09:38:13 +01:00
kinggo b788e663c6 feat: support custom formvalue function (#1453) 2022-12-25 09:37:49 +01:00
kinggo 2a572e08ef doc: optimize the comment of the Request.Done method (#1454) 2022-12-18 11:29:17 +01:00
kinggo 49951353c8 feat: add ShutdownWithContext (#1383) 2022-11-20 13:26:36 +02:00
kinggo 7b3bf58850 style: modify typo and remove repeated type conversions (#1437) 2022-11-18 08:13:18 +02:00
Andy Pan 8a60232af1 Assert with *net.TCPConn instead of *net.TCPListener in acceptConn() for TCP sockets (#1432)
Make the code more succinct.
2022-11-15 16:34:34 +01:00
pj d404f2db91 make RequestCtx's userdata accept keys that are of type: interface{} (#1387)
Co-authored-by: rocketlaunchr-cto <rocketlaunchr.cloud@gmail.com>
2022-10-06 16:25:32 +02:00
Erik Dubbelboer 28bec71c96 Fix "use of closed network connection" error check
This was refactored out incorrectly in a previous change.
2022-08-26 14:15:21 +02:00
Geralt X Li 3b147b7fe4 Fix(server): reset maxRequestBodySize to the server's config (#1360)
* fix(server): reset maxRequestBodySize to the server's config when HeaderReceived is set

* fix(server): reset writeTimeout
2022-08-23 16:44:59 +02:00
Aoang ea6052464e Add Go 1.19 Support (#1355)
* Update Go Version to Go1.19.x And add cache

* Fix CI Line endings

* Update test CI Go Version to Go1.19.x And add cache

* Update Gosec Security Scanner CI to securego/gosec@v2.12.0

* Format comment

Go 1.19 adds support for links, lists, and clearer headings in doc comments. As part of this change, gofmt now reformats doc comments to make their rendered meaning clearer. See “Go Doc Comments” for syntax details and descriptions of common mistakes now highlighted by gofmt. As another part of this change, the new package go/doc/comment provides parsing and reformatting of doc comments as well as support for rendering them to HTML, Markdown, and text.

ref: https://tip.golang.org/doc/go1.19
ref: https://tip.golang.org/doc/comment

* Fix doc structure
2022-08-14 11:31:57 +02:00
Erik Dubbelboer b23c5e9083 Close new connections after 5s in closeIdleConns
When calling closeIdleConns() also close new connections that haven't
received any data within 5 seconds.
Some applications open new connections but don't send anything and keep
them as keep-alive for potential future requests. We don't want to
keeping hanging on these when shutting down a server.
2022-06-28 11:04:21 +02:00
Y.Horie bc24f9d683 Consolidate TCPKeepalive in server.Serve (#1320) (#1324) 2022-06-20 21:42:05 +02:00
Sergey Ponomarev c9f43eaa1b Response.ContentEncoding(): store as field and avoid using Header.SetCanonical() (#1311)
* Response.ContentEncoding(): store as field

The CE is not so often used for plain APIs responses and even not so often used for static files and on the fly compression.
But still it should be checked each time.
Also having a dedicated field getter and setter simplifies code

* header.go Use shorter Response.setNonSpecial() and Request.setNonSpecial() methods instead of SetCanonical()

The change should improve performance because the setSpecialHeader() call is omitted.
As a downside on adding a new basic header field all putHeader() must be replaced with a direct getter and setter.
2022-06-05 15:47:59 +02:00
Sergey Ponomarev de188244b4 Optimize server connection close logic (#1310)
* server.go Make code more clear

Inline isHTTP11 var.
Use direct Header.SetConnectionClose() and Header.ConnectionClose()

* server.go Use direct SetConnectionClose()

The SetCanonical(strConnection, strClose) call internally will anyway call SetConnectionClose().
The "Connection: close" will be printed in the ResponseHeader.AppendBytes()

* server.go Simplify connectionClose evaluation

The conn limit check merged into connectionClose evaluation.
This improves performance for most cases:
1. If the connectionClose already true then the conn limit check won't be performed.
2. The SetConnectionClose() was duplicated
3. First check conn limit and only then check for resp.connClose because most users don't close conns manually.
4. We may optimize more: If the resp.connClose = true then SetConnectionClose() not needed but as mentioned above this is a rare case.
2022-06-05 13:05:46 +02:00
Erik Dubbelboer 7cc6f4c513 Fix DoTimeout Streaming body bug 2022-04-26 00:45:51 +02:00
Erik Dubbelboer 7a5afddf5b Use %v for errors and %q for strings (#1262)
Mostly in tests.
2022-04-01 18:11:16 +02:00
Erik Dubbelboer b4152d1a99 Only set RequestCtx.s once
We have a RequestCtx pool per server so we only need to set it once.
This fixes a race codition where acquireCtx would assign .s while
.Done() is reading it. Even though acquireCtx would always set it to the
same, already assigned, value it would still trigger the race detector.

Fixes: https://github.com/valyala/fasthttp/issues/1261
2022-04-01 15:56:02 +02:00
Erik Dubbelboer d4c739eee5 State active (#1260)
* Require at least Go 1.15

* Fix StateActive state

* Don't panic when idle connections get closed
2022-04-01 10:18:48 +02:00
Aoang f3bce3aa6e Add Go 1.18 support (#1253)
* Add Go 1.18 support

* fix Gosec Security Scanner

https://github.com/valyala/fasthttp/runs/5595618634?check_suite_focus=true

* fix https://github.com/securego/gosec/issues/469#issuecomment-1070608395 Gosec Github Action Doesn't Work at Go 1.18

* fix https://github.com/golangci/golangci-lint/pull/2438 golangci/golangci-lint Doesn't Work at Go 1.18

* fix golint unused

* fix golint: SA1019: netErr.Temporary is deprecated

* fix https://github.com/valyala/fasthttp/issues/1256
2022-03-20 14:34:31 +01:00
Erik Dubbelboer 62c15a5d09 Don't reset RequestCtx.s (#1234)
RequestCtx's are reused in a server specific pool, so no need to reset
it. This fixes a use after reset but when RequestCtx is use as context.

Fixes #1205
2022-03-04 10:02:47 +01:00
Erik Dubbelboer 15262ecf3c Warn about unsafe ServeFile usage (#1228)
See: https://github.com/valyala/fasthttp/issues/1226
2022-03-03 08:51:13 +01:00
Pavel Burak 6937fee923 fix: (useless check), skip Response body if http method HEAD (#1224) 2022-02-20 18:14:24 +01:00
Sergio VS 436977654a fix(hijack): reuse RequestCtx (#1201)
* fix(hijack): reuse RequestCtx

* fix(test/hijack): increase wait time

* fix(test/hijack): wait for all connections to finish to check responses
2022-01-22 04:54:37 +01:00
Sergio VS 2aca3e8263 fix(hijack): reset userValues after hijack handler execution (#1199)
* fix(hijack): reset userValues after hijack handler execution

* feat: add test

* fix: typo

* fix(test): race condition
2022-01-18 12:45:41 +01:00
Kilos Liu 6b55811130 Add MaxIdleWorkerDuration to Server. (#1183) 2021-12-26 07:56:34 +01:00
Sergio VS 258a4c17b4 fix: reset response after reset user values on keep-alive connections (#1176) 2021-12-16 05:27:02 +01:00
Erik Dubbelboer e9db537178 Use %w to wrap errors (#1175) 2021-12-13 09:41:34 +01:00
Sergio VS 017f0aa09d fix: reset request after reset user values on keep-alive connections (#1162)
* fix: reset request after reset user values on keep-alive connections

* test: add test for reset request after reset user values
2021-11-23 11:12:06 +01:00
ichx 3b117f8f1e feat: close idle connections when server shutdown (#1155)
* feat: close idle connections when server shutdown

* Fix redundant code

* Update test

* Update test
2021-11-13 11:53:10 +01:00
ichx a94a2c3253 Remove redundant code (#1154) 2021-11-11 19:40:30 +01:00
Shivansh Vij 2ca01c7efb fix: Status Line parsing and writing (#1135)
* Adding zero-allocation uint64 to byte slice conversion and fixing the ResponseHeader.SetStatusLine function call signature

* Removing unnecessary i2b function

* Fixing various bugs

* Adding test cases

* Commenting AppendStatusLine

* Update status.go

Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>

* Update header.go

Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>

* Cleaning up references to strHTTP11, using formatStatusLine for invalidStatusLine, and making `appendStatusLine` an unexported function

Issue: https://github.com/valyala/fasthttp/issues/1132

* Fixing merge conflicts

Issue: https://github.com/valyala/fasthttp/issues/1132

* Replacing []byte{} with nil in some test cases

Issue: https://github.com/valyala/fasthttp/issues/1132

* Cleaning up parsing first line, and improving StatusMessage function

Issue: https://github.com/valyala/fasthttp/issues/1132

* Fixing as per PR

* Update header.go

Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>

* Update header.go

Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>

* Fixing as per requested changes

* Update header_test.go

Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>

Co-authored-by: Erik Dubbelboer <erik@dubbelboer.com>
2021-11-08 09:44:02 +01:00
Sergio VS 4cfec1a795 feat: make public Server.TLSConfig (#1128)
* feat: make public Server.TLSConfig

* fix: clone tls config only when ServeTLS, ServeTLSEmbed, ListenAndServeTLS or ListenAndServeTLSEmbed
2021-10-20 20:41:02 +02:00
tyltr 7fdd5261e8 feat: a new userData API Remove (#1117)
* feat:userData new api "delete"

* ctx api `remove`

* rename

* modify
2021-10-08 17:45:45 +02:00
Erik Dubbelboer ffab77a59d Improve return value reusability documentation 2021-10-01 13:38:31 +02:00
tyltr 44d0333ba3 fix: typo (#1105) 2021-09-17 09:16:52 +02:00
Erik Dubbelboer 63211032d4 Various deadline fixes (#1081) 2021-08-28 11:19:32 +02:00
Lanco 0fe8cddd97 Optimize size of Server by moving bool fields (#1077) 2021-08-23 11:27:51 +02:00
Tianyi Song d31e6dbdba Handle perIPConn in RequestCtx.IsTLS() specially (#1064) 2021-08-04 20:15:05 +02:00
Sujit Baniya d0df1e1dde Add ResetUserValues() and test (#1056) 2021-07-01 10:57:21 +02:00
Erik Dubbelboer f6560bebb2 Flush buffered responses if we have to wait for the next request (#1050)
* Flush buffered responses if we have to wait for the next request

Don't wait for the next request as this can take some time, instead
flush the outstanding responses already.

Fixes #1043

* Only peek 1 byte

Make sure old clients that send bogus \r\n still work.
See: https://github.com/golang/go/commit/bf5e19fbaf02b1b25fbe50c27ec301fe830a28d0
2021-06-28 17:38:39 +02:00
Erik Dubbelboer cec99537fe Add IdleTimeout to Shutdown documentation 2021-06-18 13:38:17 +02:00
Sergio Andrés Virviescas Santana b433ecfcbd Make sure to reset the userValues always and at the exact time (#1027)
* Ensure reset userValues always that release RequestCtx

* Reset userValues after response write and hijack handler are executed
2021-05-22 17:23:41 +02:00
Lauris BH 620f0c83ad Add option for middleware to set custom remote address (#1009)
* Add option for middleware to set custom remote address

* Update Init2 to clear custom context remoteAddr
2021-04-23 13:25:02 +02:00
Daniel Firsht 2a6f7db5bb Adding support for securing error logs (#1001)
Co-authored-by: Daniel Firsht <firsht@amazon.com>
2021-03-26 10:46:57 +01:00