Dinesh Belwalkar | e63f7f9 | 2019-11-22 23:11:16 +0000 | [diff] [blame] | 1 | // Copyright 2018 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
| 5 | // Package httpguts provides functions implementing various details |
| 6 | // of the HTTP specification. |
| 7 | // |
| 8 | // This package is shared by the standard library (which vendors it) |
| 9 | // and x/net/http2. It comes with no API stability promise. |
| 10 | package httpguts |
| 11 | |
| 12 | import ( |
| 13 | "net/textproto" |
| 14 | "strings" |
| 15 | ) |
| 16 | |
| 17 | // ValidTrailerHeader reports whether name is a valid header field name to appear |
| 18 | // in trailers. |
| 19 | // See RFC 7230, Section 4.1.2 |
| 20 | func ValidTrailerHeader(name string) bool { |
| 21 | name = textproto.CanonicalMIMEHeaderKey(name) |
| 22 | if strings.HasPrefix(name, "If-") || badTrailer[name] { |
| 23 | return false |
| 24 | } |
| 25 | return true |
| 26 | } |
| 27 | |
| 28 | var badTrailer = map[string]bool{ |
| 29 | "Authorization": true, |
| 30 | "Cache-Control": true, |
| 31 | "Connection": true, |
| 32 | "Content-Encoding": true, |
| 33 | "Content-Length": true, |
| 34 | "Content-Range": true, |
| 35 | "Content-Type": true, |
| 36 | "Expect": true, |
| 37 | "Host": true, |
| 38 | "Keep-Alive": true, |
| 39 | "Max-Forwards": true, |
| 40 | "Pragma": true, |
| 41 | "Proxy-Authenticate": true, |
| 42 | "Proxy-Authorization": true, |
| 43 | "Proxy-Connection": true, |
| 44 | "Range": true, |
| 45 | "Realm": true, |
| 46 | "Te": true, |
| 47 | "Trailer": true, |
| 48 | "Transfer-Encoding": true, |
| 49 | "Www-Authenticate": true, |
| 50 | } |