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 .

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值