Google的文档似乎表明302和307都被等同对待,并且"Googlebot将继续爬取和索引原始位置"。
但面对模糊不清的情况,您最好深入研究RFC并尝试做正确的事情,带着天真的希望,爬虫也会这样做。在这种情况下,RFC 2616 § 10.3 对每个响应代码都包含几乎相同的定义,只有一点例外:
302:由于重定向可能会偶尔更改,客户端应该继续使用 Request-URI 以供未来请求。
307:由于重定向可能会偶尔更改,客户端应该继续使用 Request-URI 以供未来请求。
这对我来说不是很重要的区别。我的理解是,302指示客户端网站管理员不值得信任,而307明确告诉网站管理员客户端不会信任他们,因此可以自由更改重定向。
我认为更有说服力的是302定义中的注释:
注意:RFC 1945和RFC 2068指定客户端不允许更改重定向请求的方法。但是,大多数现有用户代理实现将302视为303响应,并在Location字段值上执行GET,而不考虑原始请求方法。状态码303和307已添加到希望使客户端清楚了解需要哪种反应的服务器。
这对我来说表明302和307在很大程度上是等效的,但HTTP/1.0客户端第一次未能正确实现302。
需要保留请求类型的情况非常罕见。如果你确实遇到这种情况,答案很简单:使用302。如果客户端使用的是HTTP 1.0,则无法理解307;如果客户端使用的是HTTP 1.1,则无需保留旧版客户端的叛逆行为,即它正确实现了302,因此应该使用它!
oldlocation/myform
的POST将变为对newlocation/myform
的GET,这不是期望的行为。在进行表单提交重定向的特殊情况下,可以使用303,但不应将其用于移动资源。 - Kevin Christopher Henry五年过去了......需要注意的是,2014年6月RFC-7231#6.4.7更新了307的行为,并且现在与302有显著不同之处,即如果它执行自动重定向到该URI,则方法不得更改:
307(临时重定向)状态代码表示目标资源暂时驻留在不同的URI下,如果它执行自动重定向到该URI,则用户代理不得更改请求方法。
对于原始问题可能不是问题,但对于其他只是寻找区别的人可能会有所帮助。
我理解你的痛苦。至于解决方案,很难说搜索引擎会怎么做。似乎每个搜索引擎都有自己处理重定向的方式。这个链接建议使用302将重定向页面的内容索引,但仍使用主页面链接,但不清楚307会怎么做。
另一种方法是考虑使用javascript重定向和<noscript>
标签来解释正在发生的事情。这也会影响非javascript浏览器,并且您必须小心谨慎地进行操作,以避免Google的诡秘网站检测程序,但我认为只要您的noscript包含与新URL匹配的超链接,就应该没问题。
编辑刚刚看到您正在使用.NET。也许考虑来自SO的此答案:C# Can i modify Request.Form's variables? 。
<link rel="canonical">
标签在结果页面中都是一个不错的选择。它可以帮助优化搜索引擎对于该页面的理解和排名。 - TRiG