我正在自动化一个 Web 应用程序(Mantis 错误跟踪器),我从中得到了一个有趣的响应标头,称为 Refresh:
HTTP/1.x 200 OK
...
Refresh: 0;url=my_view_page.php
它的行为方式似乎与元刷新相同,元刷新技术意味着它相当于 HTTP 中的标头。
问题是,我在HTTP 标准或任何其他关于如何解析它以及浏览器遇到它时应该做什么的权威文档中找不到任何提及 Refresh 标头的内容。
这里发生了什么?
我正在自动化一个 Web 应用程序(Mantis 错误跟踪器),我从中得到了一个有趣的响应标头,称为 Refresh:
HTTP/1.x 200 OK
...
Refresh: 0;url=my_view_page.php
它的行为方式似乎与元刷新相同,元刷新技术意味着它相当于 HTTP 中的标头。
问题是,我在HTTP 标准或任何其他关于如何解析它以及浏览器遇到它时应该做什么的权威文档中找不到任何提及 Refresh 标头的内容。
这里发生了什么?
据我所知,Refresh(连同 Set-Cookie 和可能的其他一些专有伪标头)是由 Netscape 在 Internet 的早期创建的,并且从那时起基本上(但不完全是)标准。因为几乎所有浏览器都支持它,所以 Refresh 使用起来非常安全——而且通常也是如此。
我猜它从未成为官方标准的一部分,因为他们已经通过状态代码对此做出了规定。
来自 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找到它的历史的一个很好的概述
这是 Netscape 的专有/非标准扩展。大多数网络浏览器都支持它。
我相信它最初是一个 Netscape 扩展,并没有标准化,因为它已被 W3C 弃用:
“刷新”HTTP 响应标头已在 HTML 中标准化(无论如何对于 Web 浏览器):
该 URL 看起来不太稳定,因此以下是截至 2019-12-03 的相关步骤:
- 如果响应有
Refresh
标头,则:
- 令value为 header 的 value 的同构解码。
- 使用document和value运行共享的声明性刷新步骤。