diff options
author | Brad Fitzpatrick <bradfitz@golang.org> | 2018-11-05 16:26:45 +0000 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2018-11-14 21:07:02 +0000 |
commit | bfd9b94069e74b0c6516a045cbb83bf1024a1269 (patch) | |
tree | ba017b7c5b061b122f2f4d889bd88c761bfa220d /src/net/http/request.go | |
parent | 0c7762cd184649552309c82671bf81f89d215ff7 (diff) | |
download | go-git-bfd9b94069e74b0c6516a045cbb83bf1024a1269.tar.gz |
net/http: make Transport respect {X-,}Idempotency-Key header
Fixes #19943
Change-Id: I5e0fefe44791d7b3556095d726c2a753ec551ef2
Reviewed-on: https://go-review.googlesource.com/c/147457
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Diffstat (limited to 'src/net/http/request.go')
-rw-r--r-- | src/net/http/request.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/net/http/request.go b/src/net/http/request.go index 0bcdeae0df..5b7e6564ae 100644 --- a/src/net/http/request.go +++ b/src/net/http/request.go @@ -579,7 +579,7 @@ func (r *Request) write(w io.Writer, usingProxy bool, extraHeaders Header, waitF // Use the defaultUserAgent unless the Header contains one, which // may be blank to not send the header. userAgent := defaultUserAgent - if _, ok := r.Header["User-Agent"]; ok { + if r.Header.has("User-Agent") { userAgent = r.Header.Get("User-Agent") } if userAgent != "" { @@ -1345,6 +1345,12 @@ func (r *Request) isReplayable() bool { case "GET", "HEAD", "OPTIONS", "TRACE": return true } + // The Idempotency-Key, while non-standard, is widely used to + // mean a POST or other request is idempotent. See + // https://golang.org/issue/19943#issuecomment-421092421 + if r.Header.has("Idempotency-Key") || r.Header.has("X-Idempotency-Key") { + return true + } } return false } |