[fix]http头部可以重复key

pull/2/head
joestarzxh 4 years ago
parent 8750061fc4
commit 0825c539e0

@ -12,14 +12,29 @@ import (
"strings"
)
type HttpHeaders map[string][]string
type LineReader interface {
ReadLine() (line []byte, isPrefix bool, err error)
}
func (h HttpHeaders) Value(key string)string {
values,ok:=h[key]
if !ok{
return ""
}
return values[0]
}
func (h HttpHeaders) Values(key string)[]string {
return h[key]
}
func (h HttpHeaders) SetValue(key,value string) {
h[key] = append(h[key],value)
}
// @return firstLine: request的request line或response的status line
// @return headers: request header fileds的键值对
func ReadHttpHeader(r LineReader) (firstLine string, headers map[string][]string, err error) {
headers = make(map[string][]string)
func ReadHttpHeader(r LineReader) (firstLine string, headers HttpHeaders, err error) {
headers = make(HttpHeaders)
var line []byte
var isPrefix bool
@ -51,7 +66,7 @@ func ReadHttpHeader(r LineReader) (firstLine string, headers map[string][]string
err = ErrHttpHeader
return
}
headers[strings.Trim(l[0:pos], " ")] = append(headers[strings.Trim(l[0:pos], " ")],strings.Trim(l[pos+1:], " "))
headers.SetValue(strings.Trim(l[0:pos], " "),strings.Trim(l[pos+1:], " "))
}
return
}

@ -23,7 +23,7 @@ type HttpMsgCtx struct {
ReqMethodOrRespVersion string
ReqUriOrRespStatusCode string
ReqVersionOrRespReason string
Headers map[string][]string
Headers HttpHeaders
Body []byte
}
@ -31,7 +31,7 @@ type HttpReqMsgCtx struct {
Method string
Uri string
Version string
Headers map[string][]string
Headers HttpHeaders
Body []byte
}
@ -39,7 +39,7 @@ type HttpRespMsgCtx struct {
Version string
StatusCode string
Reason string
Headers map[string][]string
Headers HttpHeaders
Body []byte
}

Loading…
Cancel
Save