什么是307临时重定向及何时需使用

错误类型:
HTTP错误
错误名称:
HTTP 307临时重定向
英文名称:
307 Temporary Redirect
错误描述:
这原则上并不是一个错误。307(临时重定向)状态码表示目标资源临时驻留在不同的 URI 下,如果用户代理执行自动重定向到该 URI,则用户代理不得更改请求方法。由于重定向会随着时间的推移而改变,客户端应该继续使用原始的有效请求 URI 来处理未来的请求。

什么是307临时重定向及何时需使用

HTTP协议定义了40多个服务器状态代码,其中9个明确用于URL重定向。每个重定向状态代码都以数字 3 (HTTP 3xx) 开头,并且有自己的处理重定向的方法。虽然它们中的一些是相似的,但它们都以不同的方式处理重定向。

作为站长,了解您可能遇到的各种超文本传输​​协议 (HTTP) 状态代码非常重要。像“307重定向”这样的其他错误对于确保访问者可以成功访问您的URL(并且您不会受到搜索引擎的惩罚)至关重要。但是,这并不是唯一可用的重定向类型,因此您可能想知道何时适合使用它。

在这篇文章中,我们将深入介绍HTTP 307临时重定向307内部重定向状态代码,包括它们的重要性以及它们与其他 3xx 重定向状态代码的区别。

  1. 什么是HTTP 307临时重定向?
  2. HTTP 3xx重定向的工作原理
  3. 各种HTTP 3xx重定向
  4. 使用302 vs 303 vs 307进行临时重定向
  5. 了解仅HTTPS站点的HTTP 307内部重定向
  6. HTTP 307重定向和SEO

什么是HTTP 307临时重定向?

互联网工程任务组 (IETF) 将307临时重定向定义为:

307(临时重定向)状态码表示目标资源临时驻留在不同的 URI 下,如果用户代理执行自动重定向到该 URI,则用户代理不得更改请求方法。由于重定向会随着时间的推移而改变,客户端应该继续使用原始的有效请求 URI 来处理未来的请求。

有数十种HTTP状态代码,分为五个主要类别。例如,遵循“4XX”结构的代码,例如404,是客户端错误。

HTTP“3XX”是重定向类别。有九种不同类型的重定向。例如,301状态代码用于指示网页何时永久移动。

重定向状态代码对于搜索引擎优化 (SEO)至关重要。将用户搜索引擎机器人正确路由到适当的 URL 很重要,尤其是当他们移动时。

307是一种临时重定向。此HTTP响应状态代码意味着某人请求的URL已暂时移动到不同的URI(用户资源标识符),但最终将返回其原始位置。此外,它还告诉搜索引擎您的服务器与HTTP 1.1兼容。

无需太技术化,307重定向是302重定向的较新版本(或后续版本)。后者可用于临时将用户重新路由到新URL,这在您重新设计网站时会派上用场。

另一方面,307重定向表示用户请求的 URL 已移动到临时位置,但会返回。302和307之间的主要区别在于请求方法不会随着307状态代码而改变:

307响应标头

例如,请求不能从GET更改为POST。它必须是GET和GET,或者POST和POST。简而言之,这些请求-响应方法是浏览器和服务器通信的方式。您可以在W3Schools上详细了解各种HTTP请求方法之间的区别

HTTP 3xx重定向的工作原理

在我们深入研究HTTP 307临时重定向和307内部重定向响应之前,让我们了解HTTP重定向的工作原理。

HTTP状态代码是从服务器到浏览器的响应。每个状态代码都是一个三位数字,第一个数字定义了它是什么类型的响应。HTTP 3xx状态代码意味着重定向。它们命令浏览器重定向到一个新的 URL,该 URL在服务器响应的Location标头中定义。

HTTP 3xx重定向

HTTP 3xx重定向

当您的浏览器遇到来自服务器的重定向请求时,它需要了解此请求的性质。各种HTTP 3xx重定向状态代码处理这些请求。了解所有这些将有助于我们更好地理解 307 临时重定向和 307 内部重定向。

我们谈的时候,你应该使用307重定向之前,它可能有助于了解如何它的工作原理。首先,您的浏览器向您尝试访问的站点的Web服务器发送初始请求。

使用Location标头,服务器然后以HTTP 3XX状态代码(在本例中为307)进行响应。然后浏览器将请求发送到新的URL位置,服务器再次响应(这次通过发送显示网页所需的数据)。

请注意,有两种类型的307重定向:临时和内部。307内部重定向是307临时的变体,发生在浏览器级别。因此,它不会影响您网站的SEO。

各种HTTP 3xx重定向

有几种类型的HTTP 3xx重定向状态代码。最初的HTTP规范不包括307临时重定向和308永久重定向,因为这些角色是由301永久迁移和302发现来填补的。

然而,大多数客户端将HTTP请求方法从POST更改为GET以获取301和302重定向响应,尽管HTTP规范不允许客户端这样做。这种行为需要在HTTP/1.1更新中引入更严格的307 临时重定向308 永久重定向状态代码。

HTTP 307 内部重定向响应是307 临时重定向状态代码的变体。它不是由HTTP标准定义的,只是一个本地浏览器实现。我们稍后会更详细地讨论它。

虽然默认情况下会缓存诸如301和308之类的重定向状态代码,但其他诸如302和307之类的则不会。但是,您可以通过添加Cache-ControlExpires响应头字段使所有重定向响应可缓存(或不可缓存)。

HTTP重定向并不复杂

HTTP重定向并不复杂

使用302 vs 303 vs 307进行临时重定向

如上图所示,对于临时重定向,您有三个选项:302、303或307。但是,大多数客户端将302状态代码视为303响应并将HTTP请求方法更改为GET。从安全的角度来看,这并不理想。

“ RFC 1945 和 RFC 2068 指定不允许客户端更改重定向请求的方法。然而,大多数现有的用户代理实现将 302 视为 303 响应,无论原始请求方法如何,对 Location 字段值执行 GET。状态代码 303 和 307 已添加用于希望明确明确客户端期望哪种反应的服务器。”–  HTTP/1.1。状态代码定义,W3.org

因此,对于需要维护HTTP请求方法的临时重定向,请使用更严格的HTTP 307临时重定向响应。

例如将/register-form.html重定向到signup-form.html,或从/login.php重定向到/signin.php。

对于需要将重定向请求方法更改为GET的情况,请改用303 See Other响应。

例如,从 /register.php页面重定向POST请求以通过GET请求加载/success.html页面。

除非您的目标受众使用旧客户端,否则请避免使用302 Found重定向响应。

了解仅HTTPS站点的HTTP 307内部重定向

如果您有一个仅支持HTTPS的站点,当您尝试通过常规http://不安全地访问它时,您的浏览器将自动重定向到其安全的https://版本。通常,这发生在来自服务器的301永久迁移重定向响应中。

例如,如果您访问http://citibank.com并在Chrome中加载DevTools并选择网络选项卡,您可以看到浏览器和服务器之间发出的所有请求。

第一个响应是301 Moved Permanently,它将浏览器重定向到站点的HTTPS版本。

301响应重定向到HTTPS版本

301响应重定向到HTTPS版本

如果我们深入研究第一个请求的Headers字段,我们可以看到Location响应标头定义了重定向的安全URL是什么。

位置响应头定义了重定向URL

位置响应头定义了重定向URL

这种方法的问题在于恶意行为者可以劫持网络连接以将浏览器重定向到自定义URL。像这样的中间人 (MITM) 攻击非常普遍。一部受欢迎的电视剧甚至在其中一集中对其进行了恶搞。

此外,恶意方可以在不更改浏览器地址栏中显示的URL的情况下发起MITM攻击。例如,可以为用户提供看起来与原始站点完全相同的网络钓鱼页面。

由于一切看起来都一样,包括地址栏中的URL,大多数用户会很乐意输入他们的凭据。你可以想象为什么这会很糟糕。

301重定向到HTTPS不安全

301重定向到HTTPS不安全

使用HTTP 307内部重定向安全重定向

现在,让我们用闪电博尝试相同的示例。访问http://www.wbolt.com会导致网络请求,如下面的屏幕截图所示。

307内部重定向示例

307内部重定向示例

站点的第一个请求与前面的示例类似,但这次会导致307 内部重定向响应。单击它会向我们显示有关此响应的更多详细信息。

注意:如果您尝试直接使用https://访问该站点,您将不会看到此标头,因为浏览器不需要执行任何重定向。

307内部重定向响应的响应头

307内部重定向响应的响应头

注意 Non-Authoritative-Reason: HSTS响应头。这是HTTP 的严格传输安全 (HSTS),也称为Strict-Transport-Security响应标头。

什么是 HSTS(严格传输安全)?

IETF于2012年批准了HTTP严格传输安全(HSTS),以强制浏览器在站点严格运行HTTPS时使用安全连接。

这类似于Chrome或Firefox说:“我甚至不会尝试通过不安全的HTTP协议请求此站点或其任何资源。相反,我会将其更改为HTTPS,然后再试一次。”

通过307内部重定向响应提高安全性

通过307内部重定向响应提高安全性

深入研究第二个请求的响应头会让我们更好地理解。

验证HSTS响应头

验证HSTS响应头

在这里,您可以看到 strict-transport-security: max age=31536000响应头。

strict-transport-security响应头的max-age属性定义了浏览器应该遵循这种模式的时长。在上面的示例中,此值设置为3153600秒(或 1 年)。

一旦站点返回此响应标头,浏览器甚至不会尝试发出普通的HTTP请求。相反,它将执行307 内部重定向到HTTPS并重试。

每次重复此过程时,都会重置响应标头。因此,浏览器将无法无限期地发出不安全的请求。

什么是HSTS预加载列表?

即使使用HSTS,也存在明显的安全问题。您使用浏览器发送的第一个HTTP请求是不安全的,因此重复了我们之前在花旗银行中观察到的问题。

此外,HSTS响应头只能通过HTTPS发送,因此初始的不安全请求甚至无法返回。

为了解决这个问题,HSTS在其响应头中支持预加载属性。这个想法是有一个网站列表,强制在浏览器中预加载HSTS,完全绕过这个安全问题。

将您的站点添加到浏览器的HSTS预加载列表中,它会知道您的站点执行严格的HSTS策略,即使它是第一次访问您的站点。然后,浏览器将使用307 内部重定向响应将您的站点重定向到其安全的https://方案,然后再请求其他任何内容。

您应该注意,与307 Temporary Redirect不同,307 Internal Redirect响应是浏览器本身设置的“假标头”。它不是来自服务器、网络主机或 CMS(例如 WordPress)。

将站点添加到HSTS预加载列表有许多优点:

  1. Web服务器永远不会看到不安全的HTTP请求。这减少了服务器负载并使站点更加安全。
  2. 浏览器负责从HTTP到HTTPS的重定向,使网站更快、更安全。

HSTS预加载列表要求

如果要将站点添加到浏览器的HSTS预加载列表中,则需要勾选以下条件:

  • 为您的域安装了有效的SSL/TLS证书。
  • 通过将所有HTTP流量重定向到HTTPS来强制执行严格的HTTPS。
  • 所有子域都应通过HTTPS提供服务,特别是www子域(如果该子域的DNS记录存在)。
  • 您的基本域应包含具有以下属性的 HSTS 标头:
    • 最大周期属性必须至少31536000秒(1年)来设置。
    • includeSubdomains预载指令必须指定。
    • 如果您提供额外的重定向服务,它必须包含HSTS标头,而不是它重定向到的页面。

从HSTS预加载列表中删除您的域可能既困难又耗时(最多 12 周或更长时间)。当且仅当您完全致力于在您的站点上使用HTTPS时启用 HSTS。您可以通过在hstspreload.org上提交表单将您的站点从HSTS预加载列表中删除。

将您的站点添加到HSTS预加载列表

HSTS预加载列表提交

HSTS预加载列表提交

有两种方法可以将您的站点添加到HSTS预加载列表中。

  1. 通过将您的站点提交到HSTS预加载列表目录。例如,hstspreload.org主列表由Chromium开源项目维护,并被大多数主要浏览器(Firefox、Chrome、Safari、IE 11 和 Edge)使用。
  2. 通过将以下标题字段添加到您的站点:

严格传输安全:max-age=63072000;包括子域;预载

使用第二种方法,浏览器第一次访问您的网站将不会完全安全。但是,后续访问将是完全安全的。

Mozilla的HSTS预加载列表示例

Mozilla的HSTS预加载列表示例

您可以使用安全标头等免费在线工具来验证您的站点是否正在执行HSTS。如果您担心浏览器对HSTS的支持,您可以放心,因为当今使用的几乎所有浏览器都支持 HSTS

HSTS得到所有主流浏览器的广泛支持

HSTS得到所有主流浏览器的广泛支持

HTTP 307 重定向和SEO

由于307 Temporary Redirect响应显示资源已临时移至新 URL,因此搜索引擎不会更新其索引以包含此新 URL。来自原始 URL 的“link-juice”不会传递到新 URL。

这与 301 Moved Permanently 重定向形成对比,其中搜索引擎更新其索引以包含新 URL,并将“link-juice”从原始 URL 传递到新 URL。

使用307 内部重定向响应,一切都发生在浏览器级别。因此,它应该不会对您网站的 SEO 产生直接影响。但是,将您的站点添加到 HSTS 预加载列表可以使其加载更快且更安全,这两者都可以帮助它在搜索结果中排名更高

注意不要无意中将用户和机器人重定向到无限重定向循环中,从而导致“重定向过多”错误。

何时使用307重定向

重定向可能是您网站维护的一个有用部分。但是,重要的是要小心使用它们的时间和方式,以及使用哪些。过多的URL重定向会减慢您的加载时间,并损害您的用户体验 (UX) 和SEO。

因此,最佳做法是谨慎使用它们。话虽如此,使用307重定向时有一些场景是合适的。这包括当您:

  • 更新页面上的内容
  • 迁移到不同的内容管理系统 (CMS)
  • 切换域名
  • 由于维护而暂时关闭您的网站

关键是仅在您知道移动是暂时的才使用307重定向。否则,您最好使用301或308重定向,这样您的SEO中的链接权重就会从旧URL传递到新URL。

当您打算永久删除或移动页面,或者您正在更改页面的永久链接结构时,通常最好使用301重定向。同样,当您仍然希望它们指向的页面出现在搜索引擎结果中时,最好使用 301 重定向。如果您想在您创建的新页面上从访问者那里获得反馈,同时又不妨碍您的SEO,这也会很有帮助。

如何在网站上实施307临时重定向

除了了解各种类型的重定向之外,了解如何正确实现和使用它们也很重要。以下是在您的网站上使用 307 重定向的一些关键提示。

通过.htaccess文件实现临时重定向

有几种不同的方法来实现重定向。在WordPress网站上,最好的方法通常是在您的.htaccess文件中指定307重定向,该文件是您的主要服务器配置文件。

请注意,由于这是一个如此重要的文件,因此谨慎对待对其所做的任何更改至关重要。我们还建议在修改此文件之前创建站点的备份,尤其是在您没有太多开发经验的情况下。

然后您可以通过文件传输协议 (FTP) 客户端或您的主机帐户的文件管理器应用程序访问它。通常,您可以在站点根目录的public_html文件夹中找到它:

file-manager-htaccess

.htaccess文件中,您可以使用mod_rewrite模块实现重定向。这看起来像这样:

# 使用临时重定向将服务页面重定向到新页面 
RewriteRule “^/service$” “/about/service” [R]

如需更多信息和指导,您可能需要参考Google的搜索中心关于创建重定向的指南

使用插件实现链接重定向

除了自己手动配置重定向,另一种选择是使用WordPress重定向解决方案,例如Quick Page/Post Redirect Plugin

quick-pagepost-redirect

这个免费工具可让您将301、302和307重定向添加到您的WordPress 网站。但是,重要的是要注意它使用所谓的“元刷新”重定向。

元刷新重定向发生在浏览器中,而不是您的Web服务器中。这意味着重定向会告诉浏览器在特定时间跨度内导航到指定的URL。当您看到一个网页内容如下:“如果您没有在5秒内重定向,请单击此处”时,就会发生这种情况。

这些类型的重定向不仅会使您的访问者感到困惑,而且如果使用频率过高,它们还会使搜索引擎抓取工具认为您的网站包含垃圾邮件内容。因此,我们只建议在您无法通过.htaccess文件设置重定向时使用此方法(例如,如果您的 Web 主机不提供对它的访问)。

小结

深入了解HTTP响应状态代码是成为成功网站所有者的重要组成部分。设置重定向可以帮助您正确执行站点维护。如果您只想临时移动URL,我们建议您使用307重定向。

正如我们在这篇文章中所讨论的,307重定向是一种状态代码,您可以使用它来将访问者指向一个新的 URL,但最终在您完成更改或更新后将他们带回原始 URL。当您不希望链接权重从旧URL传递到新URL时,最好使用此选项。

此外,或者你应该阅读更多关于链接重定向的相关文章,以加深这一块的了解:

评论留言