本文整理汇总了Golang中github.com/garyburd/twister/web.Header.WriteHttpHeader方法的典型用法代码示例。如果您正苦于以下问题:Golang Header.WriteHttpHeader方法的具体用法?Golang Header.WriteHttpHeader怎么用?Golang Header.WriteHttpHeader使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/garyburd/twister/web.Header
的用法示例。
在下文中一共展示了Header.WriteHttpHeader方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Respond
func (t *transaction) Respond(status int, header web.Header) (body io.Writer) {
if t.hijacked {
log.Println("twister: Respond called on hijacked connection")
return &nullResponseBody{err: web.ErrInvalidState}
}
if t.respondCalled {
log.Println("twister: Multiple calls to Respond")
return &nullResponseBody{err: web.ErrInvalidState}
}
t.respondCalled = true
t.requestErr = web.ErrInvalidState
t.status = status
t.header = header
if te := header.Get(web.HeaderTransferEncoding); te != "" {
log.Println("twister: transfer encoding not allowed")
delete(header, web.HeaderTransferEncoding)
}
if !t.requestConsumed {
t.closeAfterResponse = true
}
if header.Get(web.HeaderConnection) == "close" {
t.closeAfterResponse = true
}
t.chunkedResponse = true
contentLength := -1
if status == web.StatusNotModified {
delete(header, web.HeaderContentType)
delete(header, web.HeaderContentLength)
t.chunkedResponse = false
} else if s := header.Get(web.HeaderContentLength); s != "" {
contentLength, _ = strconv.Atoi(s)
t.chunkedResponse = false
} else if t.req.ProtocolVersion < web.ProtocolVersion(1, 1) {
t.closeAfterResponse = true
}
if t.closeAfterResponse {
header.Set(web.HeaderConnection, "close")
t.chunkedResponse = false
}
if t.req.Method == "HEAD" {
t.chunkedResponse = false
}
if t.chunkedResponse {
header.Set(web.HeaderTransferEncoding, "chunked")
}
proto := "HTTP/1.0"
if t.req.ProtocolVersion >= web.ProtocolVersion(1, 1) {
proto = "HTTP/1.1"
}
statusString := strconv.Itoa(status)
text := web.StatusText(status)
var b bytes.Buffer
b.WriteString(proto)
b.WriteString(" ")
b.WriteString(statusString)
b.WriteString(" ")
b.WriteString(text)
b.WriteString("\r\n")
header.WriteHttpHeader(&b)
t.headerSize = b.Len()
const bufferSize = 4096
switch {
case t.req.Method == "HEAD" || status == web.StatusNotModified:
t.responseBody, _ = newNullResponseBody(t.conn, b.Bytes())
case t.chunkedResponse:
t.responseBody, _ = newChunkedResponseBody(t.conn, b.Bytes(), bufferSize)
default:
t.responseBody, _ = newIdentityResponseBody(t.conn, b.Bytes(), bufferSize, contentLength)
}
return t.responseBody
}