为什么304状态码被视为“重定向”?

10
我目前正在尝试理解304/未修改如何符合HTTP状态代码3xx范围类。RFC 1945,第9.3节RFC 2616,第10.3节都阅读到:

这种状态代码表示用户代理需要采取进一步的操作才能满足请求。

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

2个回答

8
请参见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/已创建(也可以重定向)或204/无内容。毕竟,请求已经成功了。 - DaSourcerer
是的,“If-Modified-Since”标头明确告诉服务器:“我知道此资源存在,并且知道如何表示它,如果自上次我知道它以来已修改?” - 服务器将回复“304未修改”,或更合适的代码,例如“200 Ok”(内容的新版本)或“404未找到”,或者任何其他适当的代码。 - AnrDaemon

3
我想这是因为服务器将客户端“重定向”到从其本地缓存加载所需的资源,而不是从服务器下载它。如果客户端没有本地缓存副本,则根本不应该首先发送条件请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接