Aliaksandr Valialkin
b0de56d13b
Properly set "https" scheme in RequestCtx.URI() for TLS connections
2017-01-15 00:26:21 +02:00
Aliaksandr Valialkin
4ee6517626
Issue #193 : properly handle nil body when calling WriteGzip* and WriteDeflate* on Response struct
2016-10-31 13:41:50 +02:00
Aliaksandr Valialkin
3e1cb31dcd
Added SwapBody to Request and Response for zero-copy body pass between Request and Response objects
2016-09-12 13:42:59 +03:00
Aliaksandr Valialkin
834fb48f10
Immediately write compressed response data to the connection after the user flushes the data from StreamWriter
2016-08-18 13:03:57 +03:00
Aliaksandr Valialkin
8e21bc7f60
do not compress response body again if Content-Encoding is set
2016-08-17 14:50:58 +03:00
Aliaksandr Valialkin
d055141f64
Propagate 'https' scheme to request URI for TLS connections
2016-08-17 14:01:35 +03:00
Aliaksandr Valialkin
45915c69f6
Optimization: recycle request and response body buffers only if Server.ReduceMemoryUsage is set
2016-07-18 17:46:52 +03:00
Aliaksandr Valialkin
778f83ed89
Discourage using ReleaseBody, since now bytebufferpool should properly handle the case mentioned in #102
2016-06-27 18:26:56 +03:00
Aliaksandr Valialkin
00868f2226
Use separate pools for request and response bodies.
...
This should reduce potential memory waste related to byte buffers' pool usage.
2016-06-24 15:15:59 +03:00
Aliaksandr Valialkin
8ca66d3de8
Use github.com/valyala/bytebufferpool, which should protect against memory fragmentation in the pool of byte buffers like mentioned in the PR #102
2016-06-22 20:32:00 +03:00
Aliaksandr Valialkin
83a24c301b
Issue #114 : added SetHost and Host helper methods to Request
2016-06-15 20:32:54 +03:00
Aliaksandr Valialkin
8db7d05839
Close base response body streams when wrapping them into gzip or deflate stream writers
2016-06-10 20:19:15 +03:00
Aliaksandr Valialkin
90baa054bc
Export IsBodyStream on RequestCtx, Request and Response
...
These methods may help writing proper request handler wrappers
for request handlers, which may set body either via SetBodyStream*
or via usual body methods.
2016-06-03 17:07:13 +03:00
Aliaksandr Valialkin
1fc1f4cbf5
Reduce memory usage under high load by pooling request/response bodies.
...
- Use request/response body pools.
- Defer request/response body allocation until it is really required.
- Return request/response bodies to the pool as soon as they become unused.
This minimizes the total amount of memory occupied by active request/response
bodies under high load.
2016-06-03 16:54:22 +03:00
Aliaksandr Valialkin
bdd73c3261
small cleanup after 117f109c29
2016-05-27 16:11:29 +03:00
Jason Fesler
117f109c29
Add func (resp *Response) ReleaseBody(size int) ( #102 )
2016-05-24 15:49:08 +03:00
Aliaksandr Valialkin
fa50251b46
Issue #100 : accept POST query args with arbitrary charset set via Content-Type
2016-05-20 18:14:06 +03:00
Aliaksandr Valialkin
c9c8d72607
Issue #78 : immediately flush chunked data to client
2016-04-15 23:14:38 +03:00
Aliaksandr Valialkin
8280b7a162
Moved empty noCopy struct to the top of container structs. See @stemar94 's comment at https://github.com/golang/go/issues/12884 for details
2016-03-06 00:17:08 +02:00
Aliaksandr Valialkin
9f43aa1601
Do not expose noCopy.Lock
2016-03-04 21:20:52 +02:00
Aliaksandr Valialkin
9fa69c74af
Embed noCopy struct into structs, which mustn't be copied
...
This should help `go vet` detecting invalid structs' copyings.
See https://github.com/golang/go/issues/8005#issuecomment-190753527 for details.
2016-03-04 16:57:24 +02:00
Aliaksandr Valialkin
8581513fa2
Issue #61 : server: properly read multipart/form-data
2016-03-01 18:07:52 +02:00
Aliaksandr Valialkin
3546c31c2b
Issue #60 : skip body copying in DoTimeout. This should improve DoTimeout performance when dealing with big request and/or response bodies
2016-03-01 01:13:50 +02:00
Aliaksandr Valialkin
70316d0535
Issue #60 : give up to find an optimal strategy for body buffers' re-use
2016-02-29 18:35:15 +02:00
Aliaksandr Valialkin
8985a565b2
Issue #60 : throughput tuning: re-use body buffers if their size is smaller than 8Kb
2016-02-29 18:11:17 +02:00
Aliaksandr Valialkin
fcfda9f312
Issue #60 : increased client and server throughput when working with big bodies
2016-02-29 17:31:47 +02:00
Aliaksandr Valialkin
c1437a71e6
Shuffled Request and Response members in order to reduce object sizes
2016-02-25 13:57:21 +02:00
Aliaksandr Valialkin
f3d9e7ae9b
golint fix
2016-02-25 13:30:25 +02:00
Sebastian Schepens
889c65bae6
Added BodyInflate and WriteInflate to match BodyGunzip and WriteGunzip
2016-02-22 14:36:58 -03:00
Aliaksandr Valialkin
b98beaa40f
Added RequestURI helper to Request
2016-02-21 13:22:13 +02:00
Aliaksandr Valialkin
be49d3027a
Allow updating request's RequestURI and Host header via Request.URI()
2016-02-19 18:53:13 +02:00
Aliaksandr Valialkin
14b2ff3d2b
Issue #14 : Added BodyGunzip helper method to Request to be consistent with Response
2016-02-18 17:01:05 +02:00
Aliaksandr Valialkin
d7f433999f
Document that it is safe re-using []byte buffers after SetBody and AppendBody function calls
2016-02-18 16:49:23 +02:00
Aliaksandr Valialkin
7cde0cf1fa
Reduce memory waste and fragmentation by limiting the maximum request and response body size which may be re-used
2016-02-18 12:23:11 +02:00
Aliaksandr Valialkin
fd2887a5fc
Issue #53 : Clarify that the following instances mustn't be used from concurrently running goroutines: Args, Cookie, URI, RequestCtx, Request, Response, RequestHeader and ResponseHeader
2016-02-17 11:45:21 +02:00
Aliaksandr Valialkin
83e1796359
Do not copy body stream in Request.CopyTo to be consistent with Response.CopyTo
2016-02-14 14:38:00 +02:00
Aliaksandr Valialkin
a8c4ad4d10
document that WriteGzip* and WriteDeflate* methods on Response compress Response.Body() before writing it to output stream
2016-02-14 14:33:19 +02:00
Aliaksandr Valialkin
c53eccc930
always close body stream after writing request/response
2016-02-14 14:18:49 +02:00
Aliaksandr Valialkin
e7e436064f
Keep response and request body after calling Body() if SetBodyStream is called
2016-02-13 11:42:22 +02:00
Aliaksandr Valialkin
87628147e5
Use zero-alloc copy instead of io.Copy
2016-02-13 11:01:18 +02:00
Aliaksandr Valialkin
77a12cbf68
Added SetBodyStream* to Request. This allows streaming multi-GB data in request bodies
2016-02-12 20:52:29 +02:00
Aliaksandr Valialkin
1ee286887c
Substituted bytes.Buffer with ByteBuffer in marshalMultipartForm
2016-02-12 14:00:26 +02:00
Aliaksandr Valialkin
dd96137a25
Substitute bytes.Buffer with ByteBuffer when compressing response body and converting request and response to string. This shaves off one memory allocation
2016-02-11 20:03:15 +02:00
Aliaksandr Valialkin
6cd79f25f2
Added BodyWriteTo to Request and Response
2016-02-09 20:04:46 +02:00
Aliaksandr Valialkin
52d4b7ca38
Issue #15 : document that io.EOF is returned from Read* calls on (Request|Response)(Header)? only if the reader is closed before the first byte read
2016-02-05 13:14:36 +02:00
Aliaksandr Valialkin
f8c0d95e57
Issue #40 : added io.WriterTo implementation to Request and Response
2016-01-21 12:24:51 +02:00
Aliaksandr Valialkin
52ddf98cfd
Fixed golint warnings
2016-01-19 12:43:23 +02:00
Aliaksandr Valialkin
a208149ac4
FS optimization: do not read file contents on HEAD requests
2016-01-18 20:40:43 +02:00
Aliaksandr Valialkin
7320fe3bd7
Properly update Request.URI() after Request.SetRequestURI() call
2016-01-17 23:09:11 +02:00
Aliaksandr Valialkin
86ae7f9eb2
Allow parsing post args for non-POST requests (for instance, for PUT requests)
2016-01-08 14:31:49 +02:00