【问题标题】:ETag with Accept-Language带有接受语言的 ETag
【发布时间】:2017-04-20 22:51:17
【问题描述】:

我有一个 Web 服务,它为每个响应添加一个 ETag,以便将来的调用可以使用 HTTP 304(未修改)状态。我生成的 ETag 实际上只是查询类型的 Base64 编码以及时间戳。

我遇到的问题是,如果浏览器使用不同的 Accept-Language 请求相同的资源。浏览器当前发送相同的 If-None-Match 标头,因此响应是 304,即使实际资源会以不同的语言返回。所以我认为这样做的方法是添加一个 Vary Header,以向客户端指定响应随 Accept & Accept-Language 而异,如下所示。

变化:接受,接受语言

但是,无论接受语言如何,我的浏览器 (Chrome) 都使用相同的 ETag。在这里使用的正确约定是什么?

谢谢

【问题讨论】:

    标签: etag http-status-code-304 if-none-match


    【解决方案1】:

    E-Tag 标识响应内容。 所以最好使用响应体哈希来构建电子标签。 至少您可以使用查询的哈希值和连接的语言。

    【讨论】:

    • 这对我来说似乎有点弱,我可以在 ETag 中编码实际内容,但是当客户端尝试以不同语言(fr)对相同资源使用相同的 ETag 时,我会必须简单地为 fr 分配一个新的 ETag。当客户端现在再次以原始语言查询相同的内容时,他们的 fr ETag 将被忽略,并将被传递一个新的 ETag,因此他们不使用 304。这个缓存解决方案似乎很弱,因为在解决此用例(VARY)的特定标头,它通知客户端哪些 http 标头将影响输出内容。
    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 2017-09-04
    • 1970-01-01
    • 2023-02-11
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多