http/httputil
4 分钟阅读
httputil
https://pkg.go.dev/net/http/httputil@go1.20.1
Package httputil provides HTTP utility functions, complementing the more common ones in the net/http package.
常量
This section is empty.
变量
|
|
|
|
ErrLineTooLong is returned when reading malformed chunked data with lines that are too long.
函数
func DumpRequest
|
|
DumpRequest returns the given request in its HTTP/1.x wire representation. It should only be used by servers to debug client requests. The returned representation is an approximation only; some details of the initial request are lost while parsing it into an http.Request. In particular, the order and case of header field names are lost. The order of values in multi-valued headers is kept intact. HTTP/2 requests are dumped in HTTP/1.x form, not in their original binary representations.
If body is true, DumpRequest also returns the body. To do so, it consumes req.Body and then replaces it with a new io.ReadCloser that yields the same bytes. If DumpRequest returns an error, the state of req is undefined.
The documentation for http.Request.Write details which fields of req are included in the dump.
Example
|
|
func DumpRequestOut
|
|
DumpRequestOut is like DumpRequest but for outgoing client requests. It includes any headers that the standard http.Transport adds, such as User-Agent.
Example
|
|
func DumpResponse
|
|
DumpResponse is like DumpRequest but dumps a response.
Example
|
|
func NewChunkedReader
|
|
NewChunkedReader returns a new chunkedReader that translates the data read from r out of HTTP “chunked” format before returning it. The chunkedReader returns io.EOF when the final 0-length chunk is read.
NewChunkedReader is not needed by normal applications. The http package automatically decodes chunking when reading response bodies.
func NewChunkedWriter
|
|
NewChunkedWriter returns a new chunkedWriter that translates writes into HTTP “chunked” format before writing them to w. Closing the returned chunkedWriter sends the final 0-length chunk that marks the end of the stream but does not send the final CRLF that appears after trailers; trailers and the last CRLF must be written separately.
NewChunkedWriter is not needed by normal applications. The http package adds chunking automatically if handlers don’t set a Content-Length header. Using NewChunkedWriter inside a handler would result in double chunking or chunking with a Content-Length length, both of which are wrong.
类型
type BufferPool <- go1.6
|
|
A BufferPool is an interface for getting and returning temporary byte slices for use by io.CopyBuffer.
type ProxyRequest <- go1.20
|
|
A ProxyRequest contains a request to be rewritten by a ReverseProxy.
(*ProxyRequest) SetURL <- go1.20
|
|
SetURL routes the outbound request to the scheme, host, and base path provided in target. If the target’s path is “/base” and the incoming request was for “/dir”, the target request will be for “/base/dir”.
SetURL rewrites the outbound Host header to match the target’s host. To preserve the inbound request’s Host header (the default behavior of NewSingleHostReverseProxy):
rewriteFunc := func(r *httputil.ProxyRequest) {
r.SetURL(url)
r.Out.Host = r.In.Host
}
(*ProxyRequest) SetXForwarded <- go1.20
|
|
SetXForwarded sets the X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto headers of the outbound request.
- The X-Forwarded-For header is set to the client IP address.
- The X-Forwarded-Host header is set to the host name requested by the client.
- The X-Forwarded-Proto header is set to “http” or “https”, depending on whether the inbound request was made on a TLS-enabled connection.
If the outbound request contains an existing X-Forwarded-For header, SetXForwarded appends the client IP address to it. To append to the inbound request’s X-Forwarded-For header (the default behavior of ReverseProxy when using a Director function), copy the header from the inbound request before calling SetXForwarded:
rewriteFunc := func(r *httputil.ProxyRequest) {
r.Out.Header["X-Forwarded-For"] = r.In.Header["X-Forwarded-For"]
r.SetXForwarded()
}
type ReverseProxy
|
|
ReverseProxy is an HTTP Handler that takes an incoming request and sends it to another server, proxying the response back to the client.
1xx responses are forwarded to the client if the underlying transport supports ClientTrace.Got1xxResponse.
Example
|
|
func NewSingleHostReverseProxy
|
|
NewSingleHostReverseProxy returns a new ReverseProxy that routes URLs to the scheme, host, and base path provided in target. If the target’s path is “/base” and the incoming request was for “/dir”, the target request will be for /base/dir.
NewSingleHostReverseProxy does not rewrite the Host header.
To customize the ReverseProxy behavior beyond what NewSingleHostReverseProxy provides, use ReverseProxy directly with a Rewrite function. The ProxyRequest SetURL method may be used to route the outbound request. (Note that SetURL, unlike NewSingleHostReverseProxy, rewrites the Host header of the outbound request by default.)
proxy := &ReverseProxy{
Rewrite: func(r *ProxyRequest) {
r.SetURL(target)
r.Out.Host = r.In.Host // if desired
}
}
(*ReverseProxy) ServeHTTP
|
|
typeServerConn DEPRECATED
|
|
ServerConn is an artifact of Go’s early HTTP implementation. It is low-level, old, and unused by Go’s current HTTP stack. We should have deleted it before Go 1.
Deprecated: Use the Server in package net/http instead.
funcNewServerConnDEPRECATED
|
|
NewServerConn is an artifact of Go’s early HTTP implementation. It is low-level, old, and unused by Go’s current HTTP stack. We should have deleted it before Go 1.
Deprecated: Use the Server in package net/http instead.
(*ServerConn) Close
|
|
Close calls Hijack and then also closes the underlying connection.
(*ServerConn) Hijack
|
|
Hijack detaches the ServerConn and returns the underlying connection as well as the read-side bufio which may have some left over data. Hijack may be called before Read has signaled the end of the keep-alive logic. The user should not call Hijack while Read or Write is in progress.
(*ServerConn) Pending
|
|
Pending returns the number of unanswered requests that have been received on the connection.
(*ServerConn) Read
|
|
Read returns the next request on the wire. An ErrPersistEOF is returned if it is gracefully determined that there are no more requests (e.g. after the first request on an HTTP/1.0 connection, or after a Connection:close on a HTTP/1.1 connection).
(*ServerConn) Write
|
|
Write writes resp in response to req. To close the connection gracefully, set the Response.Close field to true. Write should be considered operational until it returns an error, regardless of any errors returned on the Read side.