当Web服务器希望重定向用户的浏览器时,应将哪个状态代码(即“200 OK”)放在响应头中?根据我的阅读,似乎答案可能是任何一个3XX代码,但这些代码中的每一个似乎都有不同的描述。只要“位置”在响应头中,使用哪个甚至是否重要?
答案 0 :(得分:1)
这完全取决于你为什么要进行重定向。我假设您已阅读RFC 2616。
除了可能用于页面重命名之类的内容之外,您不想使用301。我不知道任何CMS会自动执行此操作。
具有链接编辑功能的客户端应该自动进行 将对Request-URI的引用重新链接到一个或多个新的 尽可能在服务器返回的引用。
302对于临时GET-after-GET来说非常好,默认情况下是不可缓存的。它不应该用于GET-after-POST,因为它实际上意味着POST后POST(在询问用户确认之后):
注意:RFC 1945和RFC 2068指定不允许客户端 更改重定向请求的方法。但是,大多数 现有的用户代理实现将302视为303 响应,无论如何都对位置字段值执行GET 原始请求方法。状态代码303和307具有 已添加到希望明确清楚哪些服务器的服务器 对客户的反应是预期的。
303用于GET-after-POST。古代浏览器可能不支持它,因此您可能不希望将它用于GET-after-GET:
注意:许多pre-HTTP / 1.1用户代理不理解303 状态。当与这样的客户端的互操作性是一个问题时, 因为大多数用户代理会做出反应,所以可以使用302状态代码 如此处针对303所述的302响应。
307用于POST后(在与用户确认之后)。它可用于GET-after-GET,但在这种情况下你也可以使用302/303:
如果收到307状态代码以响应其他请求 比GET或HEAD,用户代理不得自动重定向 除非可以由用户确认,否则请求,因为这可能 改变发出请求的条件。
至于兼容性,如果有相当大比例(1%?)的用户落后于不理解303或307的破解代理,即使他们声称支持HTTP / 1.1,我也不会感到惊讶。 MEH。
答案 1 :(得分:1)
答案 2 :(得分:0)
重定向响应(表单的重定向) 3xx)表明资源即 客户要求已移动和 服务器无法提供服务 直。大多数这些回应 包含一些位置信息 告诉在哪里找到所要求的 资源;经常是用户代理 无需其他用户即可检索它 相互作用。最常见的回应 这种类型的是
301 Moved Permanently
, 表明给定的URI是否 更长的有效期并已移至 另一个地方,302 Found
表示资源有 被暂时转移到另一个 的地方。注意:对于网站管理员,建议在设置
301 Moved Permanently
重定向时 在a期间将页面移动到另一个URI 例如,网站重组。那 允许用户关注链接 到达资源,它也教导 搜索引擎和其他服务 资源的新位置,这样 他们可以将元数据转移到 它。添加也很重要 足够的缓存标头到301 Moved Permanently
响应所以 这个信息是由缓存的 客户并阻止它制作 对原件的不必要的请求 获取资源之前的URI 本身。
有关状态代码的更多详细信息,请参阅the W3C。有关不同状态代码如何影响SEO的直观表示,请参阅SEO Guide to HTTP Status Codes。
答案 3 :(得分:0)
响应代码302.或者至少,这是Java HttpServletResponse
在您拨打sendRedirect()
时发送的内容。如果Java就是这样做的,那可能就有原因。
301和302之间在语义上的唯一区别是301表示“永久重定向”,302表示“临时重定向”。这是否会转化为实践中的任何差异完全取决于客户端实施协议。
例如,浏览器可以决定,因为301是永久性的,它只会记住它返回的重定向URL,而不再实际发送原始URL的请求。但这完全取决于浏览器的实现。
也许一个合理的经验法则是,如果要将静态内容移动到新位置,请始终使用301.但是,如果您要发送重定向以响应对服务器上某些动态代码的请求,那么您应该使用代码302(或者替代地,307),以确保后续请求仍然发送到原始URL,以防您决定更改/更新动态代码以执行不同的操作。