客户应该有不同的表现吗?如何?


当前回答

301的主要问题是浏览器将缓存重定向,即使您从服务器级禁用了重定向。

如果要在短时间内启用重定向,那么最好使用302。

其他回答

虽然已经有了很多好的答案,但没有一个能从普通浏览器的角度说明缺陷或何时使用其中一个而不是另一个。

当你需要保持对最终URL的动态服务器端控制时,使用302而不是301 HTTP状态。使用301 http状态将使您的浏览器始终从自己的缓存加载最终URL,而不获取任何之前的URL(完全跳过第一次请求)。如果您需要保持服务器端对重定向URL的控制,则可能会产生不可预测的结果。

例如,如果您需要代表用户ip-geo-position (geo-ip-switching)进行URL重定向,请使用302。如果在这种情况下使用301,最终重定向的页面总是直接来自浏览器的缓存,向用户提供不正确/错误的内容。

状态301意味着资源(页面)被永久地移动到一个新的位置。从现在开始,客户端/浏览器不应该尝试请求原始位置,而是使用新位置。

状态302意味着资源暂时位于其他地方,客户端/浏览器应该继续请求原始url。

301的主要问题是浏览器将缓存重定向,即使您从服务器级禁用了重定向。

如果要在短时间内启用重定向,那么最好使用302。

301表示被请求的资源已经被分配了一个新的永久URI,将来任何对该资源的引用都应该使用返回的URI之一。

302表示请求的资源暂时驻留在不同的URI下。

由于重定向有时可能会改变,因此客户端应该继续使用Request-URI来处理将来的请求。

此响应只有在Cache-Control或Expires报头字段指示时才可缓存。

大多数情况下,301 vs 302对于搜索引擎的索引很重要,因为他们的爬虫会考虑这一点,并在使用301时转移PageRank。

详情见Peter Lee的回答。