题目来源:好未来
答案:T
详细可以参考:https://blog.csdn.net/tiechui1994/article/details/105752317
首先给出部分参考源码:
type Client struct {
Transport RoundTripper
CheckRedirect func(req *Request, via []*Request) error
Jar CookieJar
Timeout time.Duration
}
type RoundTripper interface {
RoundTrip(*Request) (*Response, error)
}
type CookieJar interface {
// SetCookies 在给定URL的回复中处理cookie的接收.
// 它可能会 或 可能不会 选择保存 Cookie, 具体取决于jar的策略和实现.
SetCookies(u *url.URL, cookies []*Cookie)
// Cookies 返回 cookie, 以发送对给定URL的请求. 具体实现取决于标准的cookie使用限制,
// 例如RFC 6265中的限制.
Cookies(u *url.URL) []*Cookie
}
Transport
- Client 的 Transport 通常具有内部状态(缓存的TCP连接), 因此 Client 可以被重用. Client 可以
安全地被多个 goroutine 并发使用. - Client 是比 RoundTripper (例如Transport) 更高一级, 并且还处理 HTTP详细信息, 例如 Cookie
和 Redirect.
Jar和CheckRedirect
- 在进行重定向后, Client 将 Forward(转发) 在初始请求上设置的所有标头, 但以下情况除外:
- 将 sensitive(敏感的) Header (例如 “Authorization”, “WWW-Authenticate” 和 “Cookie”,
“Cookie2”) 转发到不受信任的目标时. 当 redirect(重定向) 到一个 “与子域不匹配” 或 “与初始域不完全匹配” 的域时,
将忽略这些 Header. 例如, 从 “foo.com” 重定向到 “foo.com” 或 “sub.foo.com” 将转发 sensitive Header,
但重定向到 “bar.com” 则不会. - 如果 Jar 非空, 则使用 Jar 转发 “Cookie” 头时, 由于每个重定向可能会更改 CookieJar 的状态,
因此重定向可能会更改初始请求中设置的 “Cookie” 内容. 当转发 “Cookie” 头时, 任何修改的 Cookie 都将被
省略, 并希望 Jar 将插入那些修改的 Cookie (假设 origin 匹配). - 如果 Jar 为 nil, 则将转发原始 Cookie, 而不进行任何更改.
RoundTripper
RoundTrip
执行一个HTTP事务
, 为提供的Request
返回一个Response
.
本文来自投稿,不代表本站立场,如若转载,请注明出处: