700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > etag java_HTTP ETag和HTTP重定向

etag java_HTTP ETag和HTTP重定向

时间:2024-04-07 00:19:00

相关推荐

etag java_HTTP ETag和HTTP重定向

我有一个Web服务器,它在响应中发出 ETag 标头,并检查客户端的 If-None-Match 标头(如果存在) . 在这种情况下,客户端不是Web浏览器,而是go的内置 net/http http.Client 类型的扩展 .

这是我的代码

package util

import "net/http"

import "net/url"

type HttpClient struct {

http.Client

etags map[url.URL]string

}

func (hc *HttpClient) Do(req *http.Request) (*http.Response, error) {

const ETAG_SERVER_HEADER = "ETag"

const ETAG_CLIENT_HEADER = "If-None-Match"

//Do not attempt to use ETags on non-GET requests

if req.Method != "GET" {

return hc.Client.Do(req)

}

//Check for an existing etag

etag, ok := hc.etags[*req.URL]

if ok { //If an ETag is present, send it along

if req.Header == nil {

req.Header = http.Header{}

}

req.Header.Add(ETAG_CLIENT_HEADER, etag)

}

//Do the response

response, err := hc.Client.Do(req)

//If the response is ok

if err == nil {

if hc.etags == nil {

hc.etags = make(map[url.URL]string)

}

//Check for an ETAG from the server, store it if present

etag = response.Header.Get(ETAG_SERVER_HEADER)

if len(etag) != 0 {

hc.etags[*req.URL] = etag

}

}

return response, err

}

它目前没有问题 .

我只是为 GET 请求存储和发送ETag . 虽然将它们发送给其他请求是有效的,但它不是我当前的用例,所以我不打扰它 . 通过将 url.URL 对象映射到字符串来存储ETag .

我的问题是这个 . 我要求“/bar.html” . 服务器使用 302 Found 和 Location 标头将我重定向到“/qux.html ". I then request " /qux.html”并获得 200 OK 以及 ETag 标头 .

使用什么URL关联上一个响应中的 ETag 标头?

302 Found 本身可以包含一个 ETag Headers 吗?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。