authority: address comments from PR

This commit is contained in:
Michal Witkowski
2016-05-25 11:38:25 +01:00
parent 1ef2c5293f
commit eec6ad361b
3 changed files with 9 additions and 5 deletions

View File

@ -97,7 +97,7 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTr
}
for k, vv := range r.Header {
k = strings.ToLower(k)
if isReservedHeader(k) && !isWhitelistedHttp2Header(k){
if isReservedHeader(k) && !isWhitelistedPseudoHeader(k){
continue
}
for _, v := range vv {

View File

@ -341,6 +341,10 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea
if md, ok := metadata.FromContext(ctx); ok {
hasMD = true
for k, v := range md {
// HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set.
if isReservedHeader(k) {
continue
}
for _, entry := range v {
t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry})
}

View File

@ -127,11 +127,11 @@ func isReservedHeader(hdr string) bool {
}
}
// isWhitelistedHttp2Header checks whether hdr belongs to HTTP2 headers
// isWhitelistedPseudoHeader checks whether hdr belongs to HTTP2 pseudoheaders
// that should be propagated into metadata visible to users.
func isWhitelistedHttp2Header(hdr string) bool {
func isWhitelistedPseudoHeader(hdr string) bool {
switch hdr {
case ":authority", "Authority":
case ":authority":
return true
default:
return false
@ -173,7 +173,7 @@ func (d *decodeState) processHeaderField(f hpack.HeaderField) {
case ":path":
d.method = f.Value
default:
if !isReservedHeader(f.Name) || isWhitelistedHttp2Header(f.Name) {
if !isReservedHeader(f.Name) || isWhitelistedPseudoHeader(f.Name) {
if f.Name == "user-agent" {
i := strings.LastIndex(f.Value, " ")
if i == -1 {