【问题标题】:'Refresh' HTTP header“刷新”HTTP 标头
【发布时间】:2010-09-21 23:25:43
【问题描述】:

我正在自动化一个 Web 应用程序(Mantis 错误跟踪器),我从中得到了一个有趣的响应标头,称为 Refresh:

HTTP/1.x 200 OK
...
Refresh: 0;url=my_view_page.php

它的行为方式似乎与meta refresh 相同,并且元刷新技术意味着它相当于 HTTP 中的标头。

问题是,我在HTTP standard 或任何其他关于如何解析它以及浏览器遇到它时应该做什么的权威文档中找不到任何提及。

这是怎么回事?

【问题讨论】:

  • 我想知道的是为什么脚本会发送Refresh 标头字段,而它可能会使用 302 响应。
  • 我不知道,这就是 Mantis 所做的,可能是当它在 PHP over ASP.NET 上运行时,这是我的客户所拥有的一种奇怪的组合。
  • 注意:出于性能原因,应避免使用此标头。见blogs.msdn.com/b/ieinternals/archive/2010/05/13/…
  • @EricLaw 次要更正:如果使用延迟为 0 的刷新标头或元标记,由于您指定的原因,几乎总是应该使用 301 或 302 重定向;但是,在极少数情况下使用它确实有意义,例如存在非零延迟并且页面上要显示有意义的内容(例如,在返回之前向用户显示成功或错误消息)形式,例如)。
  • 当用户点击非 FB 链接时,即使 facebook 也会使用它。看起来真的很烦人,因为它还会在刷新时删除 hashbangs。

标签: http http-headers


【解决方案1】:

据我所知,Refresh(连同 Set-Cookie 和可能的其他一些专有伪标头)是由 Netscape 在互联网的早期创建的,并且从那时起基本上(但不完全是)标准。因为几乎所有浏览器都支持它,所以 Refresh 使用起来非常安全——而且通常也是如此。

我猜它从未成为官方标准的一部分,因为他们已经通过状态代码对此做出了规定。

【讨论】:

  • 是的。它的创建是为了支持“客户端拉取”,早在 Netscape 1.1 时代,“客户端拉取”和“服务器推送”是超级骗人的新流行语,并且积极要求添加随机破坏的“HTML 扩展”。讨厌 IE 的人:微软在 Netscape 上什么都没有……
  • @PointedEars,这个答案是 5 岁,作者最后一次见到是去年。非常大胆地期望它会改变。不过,在那之前,Refresh 标头是 W3C 通过“META refresh”称谓的acknowledged,根据维基百科,IE, Firefox, Chrome (and Safari) and Opera all support it
  • @zneak 只要它们没有根据,这些陈述的年龄就无关紧要了。我认为指出他们没有根据是我的大胆。至于“W3C 承认”,您引用了Working Group Note。确实,the W3C in general begs to differ。 Opera 很长一段时间以来都支持该功能,用户可以在“首选项”对话框中禁用
  • @PointedEars,请注意,您链接的页面上引用的原因是“它破坏了后退按钮”,而不是“它不起作用”。它甚至描述了当您使用Redirect 标头/<meta>会发生什么。我的观点主要是您对一个出于所有实际目的而被拒绝的帖子投了反对票;如果你想改变它,你最好亲自动手而不是投票。
  • @zneak 你混淆了这个问题,没有抓住重点。您引用的工作组注释和我引用的 QA Tip 都没有提到 HTTP Refresh 标头(字段);它们改为引用 HTML meta 元素(旨在等效于此类标头字段)。 (Redirect 与您想象的不同。)我认为 Chromium 32 显然支持这样的 HTTP 标头字段(因此其他浏览器也可能支持),但这不是问题所在。 IOW,到目前为止的答案并没有解决这个问题。特别是,这个答案没有。它应该被否决。
【解决方案2】:

来自 W3C HTML 4.01 规范,引用:

META 和 HTTP 标头

http-equiv 属性可以用来代替 name 属性,并且在通过超文本传输​​协议 (HTTP) 检索文档时具有特殊意义。 HTTP 服务器可以使用 http-equiv 属性指定的属性名称在 HTTP 响应中创建 [RFC822] 样式的标头。有关有效 HTTP 标头的详细信息,请参阅 HTTP 规范 ([RFC2616])。

这意味着当您使用<meta http-equiv="refresh" url="..."/> 标签时,您实际上是在指示浏览器像发送Refresh 标头一样行事。

可以在http://www.securiteam.com/securityreviews/6Z00320HFQ.html找到它的历史的一个很好的概述

【讨论】:

  • 我知道 http-equiv 与发送 HTTP 标头相同。我想知道的是 HTTP Refresh 标头来自哪里以及它记录在哪里。
【解决方案3】:

根据Wikipedia: URL Redirection

这是专有/非标准 Netscape 的扩展。支持 大多数网络浏览器。

【讨论】:

    【解决方案4】:

    我相信它最初是一个 Netscape 扩展,并没有标准化,因为它已被 W3C 弃用:

    http://www.w3.org/TR/WCAG10-HTML-TECHS/#meta-element

    【讨论】:

      【解决方案5】:

      “刷新”HTTP 响应标头已标准化(对于 Web 浏览器, 无论如何)在 HTML 中:

      https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigating-across-documents%3Ashared-declarative-refresh-steps

      那个网址看起来不太稳定,所以下面是相关步骤 2019-12-03:

      1. 如果 responseRefresh 标头,则:
        1. value为header值的同构解码。
        2. 使用 documentvalue 运行共享的声明式刷新步骤。

      【讨论】:

        猜你喜欢
        • 2012-06-15
        • 2016-07-23
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 2019-07-06
        • 2010-12-25
        相关资源
        最近更新 更多