【问题标题】:Why does the 304 status code count as a "redirect?"为什么 304 状态码算作“重定向”?
【发布时间】:2014-07-02 01:26:28
【问题描述】:

我目前正在尝试了解 304/未修改究竟如何符合 3xx 范围类的 HTTP 状态代码。 RFC 1945, sec. 9.3RFC 2616, sec. 10.3 都读取:

此类状态码表明用户代理需要采取进一步的行动来满足请求。

虽然“从客户端的本地缓存加载”显然是“进一步的操作”,但我很难理解这是 HTTP 意义上的重定向。我是不是按字面意思看这个?

【问题讨论】:

    标签: http http-status-codes http-redirect http-status-code-304


    【解决方案1】:

    我想这是因为服务器正在“重定向”客户端以从其本地缓存加载请求的资源,而不是从服务器下载它。如果客户端没有本地缓存​​副本,那么它首先不应该发送条件请求。

    【讨论】:

      【解决方案2】:

      http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-26.html#rfc.section.6.4.p.2:

      有几种类型的重定向:

      1. 指示资源可能在不同 URI 上可用的重定向,由 Location 字段提供,如状态代码 301(永久移动)、302(找到)和 307(临时重定向)。

      2. 提供匹配资源选择的重定向,每个资源都能够代表原始请求目标,如 300(多项选择)状态代码。

      3. 重定向到由 Location 字段标识的不同资源,该资源可以表示对请求的间接响应,如 303(参见其他)状态代码。

      4. 重定向到以前缓存的结果,如 304(未修改)状态码。

      【讨论】:

      • 感谢您的链接。有趣的是,304 列在一个完全不同的部分中。所以语义真的是“重定向到本地缓存的副本?”否则我真的不知道为什么“未修改”不能是 2xx 类代码,例如 201/Created(也可以重定向)或 204/No content。毕竟请求已经成功了。
      • 是的,“If-Modified-Since”标头明确告诉服务器“我知道这个资源存在,并且我知道如何表示它,自从我上次知道它以来它是否被修改过?” - 服务器将回复“304 Not modified”或更合适的代码,例如“200 Ok”(内容的新版本)或“404 Not found”,或任何其他合适的代码。
      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2021-06-18
      • 2022-07-28
      • 2012-07-01
      • 2011-08-13
      • 2017-03-27
      相关资源
      最近更新 更多