aboutsummaryrefslogtreecommitdiff
path: root/src/net/http/httputil
AgeCommit message (Collapse)Author
2016-11-01net/http/httputil: add ModifyResponse to reverseProxyEmmanuel Odeke
Adds ModifyResponse, an optional func to ReverseProxy that modifies a response in the backend, right before the headers of the response are written to the internal response writer. If ModifyResponse returns an error, the proxy returns a StatusBadGateway error. Fixes #14237. Change-Id: I8e03139e34dea0084512ccbd8cc49e941bf9fb5d Reviewed-on: https://go-review.googlesource.com/32356 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-10-24net/http/httputil: log err encountered during reverseproxy body copyingMichael Fraenkel
Fixes #16659 Change-Id: I13dd797e93e0b572eaf8726f1be594870d40183b Reviewed-on: https://go-review.googlesource.com/30692 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-09-26net/http/httputil: preallocate trailerKeys sliceGyu-Ho Lee
To prevent slice growths with append operations. Change-Id: Icdb745b23cc44dfaf3e16746b94c06997f814e15 Reviewed-on: https://go-review.googlesource.com/23784 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-09-08net/http/httputil: remove custom hop-by-hop headers from response in ↵Sina Siadat
ReverseProxy Hop-by-hop headers (explicitly mentioned in RFC 2616) were already removed from the response. This removes the custom hop-by-hop headers listed in the "Connection" header of the response. Updates #16875 Change-Id: I6b8f261d38b8d72040722f3ded29755ef0303427 Reviewed-on: https://go-review.googlesource.com/28810 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-09-08net/http/httputil: copy header map if necessary in ReverseProxySina Siadat
We were already making a copy of the map before removing hop-by-hop headers. This commit does the same for proxied headers mentioned in the "Connection" header. A test is added to ensure request headers are not modified. Updates #16875 Change-Id: I85329d212787958d5ad818915eb0538580a4653a Reviewed-on: https://go-review.googlesource.com/28493 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2016-09-04net/http/httputil: t.Error -> t.ErrorfJosh Bleecher Snyder
Found by vet. Change-Id: I09b79d68c7a5fc97e0edda4700a82bfbb00a4f45 Reviewed-on: https://go-review.googlesource.com/28486 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
2016-09-02net/http/httputil: make ReverseProxy send nil Body requests when possibleBrad Fitzpatrick
The http.Transport's retry can't retry requests with non-nil bodies. When cloning an incoming server request into an outgoing client request, nil out the Body field if the ContentLength is 0. (For server requests, Body is always non-nil, even for GET, HEAD, etc.) Also, don't use the deprecated CancelRequest and use Context instead. And don't set Proto, ProtoMajor, ProtoMinor. Those are ignored in client requests, which was probably a later documentation clarification. Fixes #16036 Updates #16696 (remove useless Proto lines) Change-Id: I70a869e9bd4bf240c5838e82fb5aa695a539b343 Reviewed-on: https://go-review.googlesource.com/28412 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
2016-09-02net/http/httputil: remove proxied headers mentioned in connection-tokensSina Siadat
RFC 2616, section 14.10 says: >>> HTTP/1.1 proxies MUST parse the Connection header field before a message is forwarded and, for each connection-token in this field, remove any header field(s) from the message with the same name as the connection-token. Connection options are signaled by the presence of a connection-token in the Connection header field, not by any corresponding additional header field(s), since the additional header field may not be sent if there are no parameters associated with that connection option. <<< The same requirement was included in RFC 7230, section 6.1. Fixes #16875 Change-Id: I57ad4a4a17775537c8810d0edd7de1604317b5fa Reviewed-on: https://go-review.googlesource.com/27970 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-05-28net/http/httputil: fix typos in deprecation commentsEmmanuel Odeke
Fixes #15868 Change-Id: I4e4471e77091309c4ea1d546b2c4f20dfbb4314e Reviewed-on: https://go-review.googlesource.com/23550 Reviewed-by: Andrew Gerrand <adg@golang.org>
2016-05-16net/http/httputil: don't add User-Agent header by proxy made with ↵Artyom Pervukhin
NewSingleHostReverseProxy If client does not provided User-Agent header, do not set default one used by net/http package when doing request to backend. Fixes #15524 Change-Id: I9a46bb3b7ec106bc7c3071e235b872d279994d67 Reviewed-on: https://go-review.googlesource.com/23089 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-05-01net/http: add Response.Uncompressed boolBrad Fitzpatrick
The Transport's automatic gzip uncompression lost information in the process (the compressed Content-Length, if known). Normally that's okay, but it's not okay for reverse proxies which have to be able to generate a valid HTTP response from the Transport's provided *Response. Reverse proxies should normally be disabling compression anyway and just piping the compressed pipes though and not wasting CPU cycles decompressing them. So also document that on the new Uncompressed field. Then, using the new field, fix Response.Write to not inject a bogus "Connection: close" header when it doesn't see a transfer encoding or content-length. Updates #15366 (the http2 side remains, once this is submitted) Change-Id: I476f40aa14cfa7aa7b3bf99021bebba4639f9640 Reviewed-on: https://go-review.googlesource.com/22671 Reviewed-by: Andrew Gerrand <adg@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-04-09net/http/httputil: DumpRequest dumps Content-Length if set in headerEmmanuel Odeke
Fixes #7215 Change-Id: I108171ef18cac66d0dc11ce3553c26fc49529807 Reviewed-on: https://go-review.googlesource.com/21790 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2016-04-06net/http, net/http/httputil: start with capitals in deprecation sentencesBrad Fitzpatrick
Fixes #15139 Change-Id: I73111137907e612af871b77ccf166572bf78c840 Reviewed-on: https://go-review.googlesource.com/21544 Reviewed-by: Andrew Gerrand <adg@golang.org>
2016-04-01net/http/httputil: deprecate Client+ServerConn harder, use Deprecated syntaxBrad Fitzpatrick
Also cleans up return parameter stutter and missing periods. Change-Id: I47f5c230227ddfd1b105d5e06842f89ffea50760 Reviewed-on: https://go-review.googlesource.com/21362 Reviewed-by: Andrew Gerrand <adg@golang.org>
2016-04-01net/http/httputil: make ReverseProxy return 502 Bad Gateway instead of 500Brad Fitzpatrick
... when the backend can't be reached. Fixes #9864 Change-Id: I9e4814824943060e0101b6236d6dfd8d7822b4c7 Reviewed-on: https://go-review.googlesource.com/21363 Reviewed-by: Andrew Gerrand <adg@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-03-31net/http, net/http/httputil: rename lk to muBrad Fitzpatrick
The conventional name for a sync.Mutex is "mu". These "lk" names date back to a time before conventions. Change-Id: Iee57f9f4423d04269e1125b5d82455c453aac26f Reviewed-on: https://go-review.googlesource.com/21361 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-03-25all: delete dead non-test codeDominik Honnef
This change removes a lot of dead code. Some of the code has never been used, not even when it was first commited. The rest shouldn't have survived refactors. This change doesn't remove unused routines helpful for debugging, nor does it remove code that's used in commented out blocks of code that are only unused temporarily. Furthermore, unused constants weren't removed when they were part of a set of constants from specifications. One noteworthy omission from this CL are about 1000 lines of unused code in cmd/fix, 700 lines of which are the typechecker, which hasn't been used ever since the pre-Go 1 fixes have been removed. I wasn't sure if this code should stick around for future uses of cmd/fix or be culled as well. Change-Id: Ib714bc7e487edc11ad23ba1c3222d1fd02e4a549 Reviewed-on: https://go-review.googlesource.com/20926 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-03-02all: single space after period.Brad Fitzpatrick
The tree's pretty inconsistent about single space vs double space after a period in documentation. Make it consistently a single space, per earlier decisions. This means contributors won't be confused by misleading precedence. This CL doesn't use go/doc to parse. It only addresses // comments. It was generated with: $ perl -i -npe 's,^(\s*// .+[a-z]\.) +([A-Z]),$1 $2,' $(git grep -l -E '^\s*//(.+\.) +([A-Z])') $ go test go/doc -update Change-Id: Iccdb99c37c797ef1f804a94b22ba5ee4b500c4f7 Reviewed-on: https://go-review.googlesource.com/20022 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Dave Day <djd@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-02-23net/http/httputil: Keep response headers when response ContentLength is 0.Harshavardhana
Current code does not print any response headers from httputil.DumpResponse(). PUT /miniocloud/new-file HTTP/1.1 Host: s3.amazonaws.com User-Agent: Go-http-client/1.1 Content-Length: 11 Accept-Encoding: gzip HTTP/1.1 200 OK With this fix we get an appropriate output for httputil.DumpResponse(). PUT /miniocloud/new-file HTTP/1.1 Host: s3.amazonaws.com User-Agent: Go-http-client/1.1 Content-Length: 11 Accept-Encoding: gzip HTTP/1.1 200 OK Content-Length: 0 Date: Thu, 14 Jan 2016 03:04:42 GMT Etag: "3e25960a79dbc69b674cd4ec67a72c62" Server: AmazonS3 X-Amz-Id-2: qnXyH6sknlovV0Myy3emFAXTNtI/sQIcu1ZXNq/6wd17K32tQ7WNGB1qb3nzCpW2DhfeZ/MbWfw= X-Amz-Request-Id: 8422EACB0CC492BD Fixes #13942 Change-Id: Ida063cc3524a96170d8a837893f7c9f49b6cf98e Reviewed-on: https://go-review.googlesource.com/18624 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-02-03net/http/httputil: also remove non-standard Proxy-Connection hop-by-hop headerBrad Fitzpatrick
libcurl sends this (despite never being standardized), and the Google GFE rejects it with a 400 bad request (but only when over http2?). So nuke it. Change-Id: I3fc95523d50f33a0e23bb26b9195f70ab0aed0f4 Reviewed-on: https://go-review.googlesource.com/19184 Reviewed-by: Chris Broadfoot <cbro@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2016-02-02net/http/httputil: fix spelling of Trailer hop-by-hop header per errataBrad Fitzpatrick
RFC Errata 4522 (http://www.rfc-editor.org/errata_search.php?eid=4522) notes that RFC 2616 had a typo in a list of headers that the httputil.ReverseProxy code copied. Fix the typo in our code. Fixes #14174 Change-Id: Ifc8f18fd58a6508a02a23e54ff3c473f03e521d3 Reviewed-on: https://go-review.googlesource.com/19133 Reviewed-by: Russ Cox <rsc@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-01-25net/http/httputil: clarify docs on the Dump functionsBrad Fitzpatrick
Also don't nil out the Request or Response Body on error. Just leave it in its previous broken state. The docs now say it's undefined, but it always was. Fixes #14036 Change-Id: I7fe175a36cbc01b4158f4dffacd8733b2ffa9999 Reviewed-on: https://go-review.googlesource.com/18726 Reviewed-by: Rob Pike <r@golang.org>
2016-01-07net/http, net/http/httputil: fix nits found by vetMikio Hara
Change-Id: Idf02428591f61dc58f654fdaf0e3a55f8b8a1060 Reviewed-on: https://go-review.googlesource.com/18350 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-01-05net/http: relax recently-updated rules and behavior of CloseNotifierBrad Fitzpatrick
The CloseNotifier implementation and documentation was substantially changed in https://golang.org/cl/17750 but it was a bit too aggressive. Issue #13666 highlighted that in addition to breaking external projects, even the standard library (httputil.ReverseProxy) didn't obey the new rules about not using CloseNotifier until the Request.Body is fully consumed. So, instead of fixing httputil.ReverseProxy, dial back the rules a bit. It's now okay to call CloseNotify before consuming the request body. The docs now say CloseNotifier may wait to fire before the request body is fully consumed, but doesn't say that the behavior is undefined anymore. Instead, we just wait until the request body is consumed and start watching for EOF from the client then. This CL also adds a test to ReverseProxy (using a POST request) that would've caught this earlier. Fixes #13666 Change-Id: Ib4e8c29c4bfbe7511f591cf9ffcda23a0f0b1269 Reviewed-on: https://go-review.googlesource.com/18144 Reviewed-by: Russ Cox <rsc@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2015-12-15net/http/httputil: make DumpRequest use Request.RequestURI when availableBrad Fitzpatrick
Fixes #10912 Change-Id: If04e3205d5cc43ebfd6864bc59340c8697cbc0af Reviewed-on: https://go-review.googlesource.com/17592 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2015-12-01net/http/httputil: add package level examplesCarlos Cirello
Change-Id: I5be18b68602a7ebb740cf05924236ce17e386e55 Reviewed-on: https://go-review.googlesource.com/17295 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-10-28net/http/httputil: add hook for managing io.Copy buffers per requestBrad Fitzpatrick
Adds ReverseProxy.BufferPool for users with sensitive allocation requirements. Permits avoiding 32 KB of io.Copy garbage per request. Fixes #10277 Change-Id: I5dfd58fa70a363ead4be56405e507df90d871719 Reviewed-on: https://go-review.googlesource.com/9399 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-10-16net: unblock plan9 TCP Read calls after socket closeBrad Fitzpatrick
Fixes #7782 Fixes #9554 Updates #7237 (original metabug, before we switched to specific bugs) Updates #11932 (plan9 still doesn't have net I/O deadline support) Change-Id: I96f311b88b1501d884ebc008fd31ad2cf1e16d75 Reviewed-on: https://go-review.googlesource.com/15941 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: David du Colombier <0intro@gmail.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-10-14net/http/httputil: clarify where DumpRequest(Out)? can be used.Aaron Jacobs
The clues to this were already there, but as a user I was still unsure. Make this more explicit. Change-Id: I68564f3498dcd4897772a303588f03a6b65f111d Reviewed-on: https://go-review.googlesource.com/15172 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-10-08net/http/httputil: clarify NewSingleHostReverseProxy's Host header behaviorBrad Fitzpatrick
Fixes #10342 Change-Id: I69c69352016a8fd0b62541128c2e86b242ebbe26 Reviewed-on: https://go-review.googlesource.com/15630 Reviewed-by: Minux Ma <minux@golang.org>
2015-09-11all: use one 'l' when cancelling everywhere except SolarisRob Pike
Fixes #11626. Change-Id: I1b70c0844473c3b57a53d7cca747ea5cdc68d232 Reviewed-on: https://go-review.googlesource.com/14526 Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-08-26net/http/httputil: permit nil request body in ReverseProxyBrad Fitzpatrick
Accepting a request with a nil body was never explicitly supported but happened to work in the past. This doesn't happen in most cases because usually people pass a Server's incoming Request to the ReverseProxy's ServeHTTP method, and incoming server requests are guaranteed to have non-nil bodies. Still, it's a regression, so fix. Fixes #12344 Change-Id: Id9a5a47aea3f2875d195b66c9a5f8581c4ca2aed Reviewed-on: https://go-review.googlesource.com/13935 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-07-11all: link to https instead of httpBrad Fitzpatrick
The one in misc/makerelease/makerelease.go is particularly bad and probably warrants rotating our keys. I didn't update old weekly notes, and reverted some changes involving test code for now, since we're late in the Go 1.5 freeze. Otherwise, the rest are all auto-generated changes, and all manually reviewed. Change-Id: Ia2753576ab5d64826a167d259f48a2f50508792d Reviewed-on: https://go-review.googlesource.com/12048 Reviewed-by: Rob Pike <r@golang.org>
2015-07-07net/http/httputil: make ReverseProxy support TrailersBrad Fitzpatrick
Go's continuous build system depends on HTTP trailers for the buildlet interface. Andrew rewrote the makerelease tool to work in terms of Go's builder system (now at x/build/cmd/release), but it previously could only create GCE-based buildlets, which meant x/build/cmd/release couldn't build the release for Darwin. https://golang.org/cl/11901 added support for proxying buildlet connections via the coordinator, but that exposed the fact that httputil.ReverseProxy couldn't proxy Trailers. A fork of that code also wasn't possible because net/http needlessly deleted the "Trailer" response header in the Transport code. This mistake goes back to "release-branch.r56" and earlier but was never noticed because nobody ever uses Trailers, and servers via ResponseWriter never had the ability to even set trailers before this Go 1.5. Note that setting trailers requires pre-declaring (in the response header) which trailers you'll set later (after the response body). Because you could never set them, before this release you could also never proxy them. Change-Id: I2410a099921790dcd391675ae8610300efa19108 Reviewed-on: https://go-review.googlesource.com/11940 Reviewed-by: Andrew Gerrand <adg@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
2015-06-26net/http: change default user agent stringAamir Khan
Default user agent in use - "Go 1.1 package http" doesn't conform to RFC 7231. See http://tools.ietf.org/html/rfc7231#section-5.5.3 Use a valid user-agent string instead. Fixes #9792 Change-Id: I80249709800dcdbf6f2e97a63fab05656898e6aa Reviewed-on: https://go-review.googlesource.com/9385 Reviewed-by: Russ Cox <rsc@golang.org>
2015-01-10net/http/httputil: skip TestReverseProxyCancellation on Plan 9David du Colombier
Update #9554 Change-Id: I7de2a7d585d56b84ab975565042ed997e6124e08 Reviewed-on: https://go-review.googlesource.com/2613 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-01-09net/http/httputil: ReverseProxy request cancellationPeter Waller
If an inbound connection is closed, cancel the outbound http request. This is particularly useful if the outbound request may consume resources unnecessarily until it is cancelled. Fixes #8406 Change-Id: I738c4489186ce342f7e21d0ea3f529722c5b443a Signed-off-by: Peter Waller <p@pwaller.net> Reviewed-on: https://go-review.googlesource.com/2320 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2014-12-16net/http/httputil: don't use DisableKeepAlives in DumpRequestOut, fix buildBrad Fitzpatrick
I broke the build in https://golang.org/change/207950a when I made http.Transport send "Connection: close" request headers when DisableKeepAlives was set true because I didn't run all the tests before submitting. httputil.DumpRequestOut used Transport to get its output, and used it with DisableKeepAlives, so this changed the output. Rather than updating golden data in our tests (because surely others depend on the exact bytes from these in their tests), switch to not using DisableKeepAlives in DumpRequestOut instead, so the output is the same as before. Change-Id: I9fad190be8032e55872e6947802055a6d65244df Reviewed-on: https://go-review.googlesource.com/1632 Reviewed-by: Andrew Gerrand <adg@golang.org>
2014-09-30net/http/httputil: ensure DumpRequestOut dumps all of BodyBrad Fitzpatrick
Bodies larger than 8KB (the default bufio reader size) weren't being dumped. Force a read of the body so they're teed into the response buffer. Thanks to Steven Hartland for identifying the problem. Fixes #8089 LGTM=r R=golang-codereviews, r CC=adg, golang-codereviews https://golang.org/cl/144650044
2014-09-08build: move package sources from src/pkg to srcRuss Cox
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.