原文:

http://www.lifelaf.com/blog/?p=481

在HTML页面中,如果想实现定时刷新或重定向,我们可以使用meta标签的refresh功能:

<!-- 5秒后刷新页面 -->
<metahttp-equiv="refresh"content="5">
<!-- 5秒后重定向到http://example.com -->
<metahttp-equiv="refresh"content="5; url=http://example.com">

那么,meta标签是什么?http-equiv又是什么?这种refresh方式如何使用?而它又有哪些好处呢?

meta标签

顾名思义,meta标签的作用是对HTML页面的元数据信息进行描述,从而为浏览器的渲染提供更多的信息。一个HTML页面可以包含多个meta标签,而每一个meta标签则用键值对的方式保存一条元数据:

<metaname="key_here"content="value_here">

值得注意的是,在HTML中meta标签是没有结束标签的,而在XHTML中则与之相反,meta标签必须被显式的关闭。

http-equiv

在meta标签中,有一类特殊的key类型,叫做http-equiv。根据W3C的定义,http-equiv可以在meta标签中替代name,如果这么做的话,HTTP服务器会把http-equiv属性及其值放在HTTP response的响应头里面(http://www.w3.org/TR/html401/struct/global.html#h-7.4.4.2):

The http-equiv attribute can be used in place of the name attribute and has a special significance when documents are retrieved via the Hypertext Transfer Protocol (HTTP). HTTP servers may use the property name specified by the http-equiv attribute to create an [RFC822]-style header in the HTTP response.

问题是:目前没有一个HTTP服务器是这么做的(http://stackoverflow.com/questions/5236900/meta-http-equiv-is-it-sent-as-part-of-an-http-header-or-does-the-client-parse)。 原因很明显,如果要这么做的话,HTTP服务器就得预先解析所有的HTML文件并缓存所有的http-equiv键值对,而这是一个不小的开销。我们可以 做一个有趣的小实验,编写一个含有http-equiv值的HTML文件并部署到HTTP服务器上;用Firefox打开该HTML文件并用 Firebug截取相关的HTTP response,我们会发现http-equiv的内容并没有出现在response的响应头中。

事 实上,http-equiv功能(出现在response的响应头中)的实现不是由HTTP服务器来完成的,而是由浏览器来模拟的。浏览器解析 HTML文档的时候会把http-equiv的键值对当作响应头来处理(如果http-equiv与真正传回来的响应头冲突,http-equiv会覆写 响应头)。

refresh

在http-equiv类型的meta标签中,有一种可用于定时刷新页面:refresh

<!-- x秒后刷新当前页面 -->
<metahttp-equiv="refresh"content="x">
<!-- x秒后重定向到URLLINK -->
<metahttp-equiv="refresh"content="x; url=URLLINK">
<!-- 浏览器打开页面后立即重定向到URLLINK -->
<metahttp-equiv="refresh"content="0; url=URLLINK">

在上面第三个例子中,浏览器一旦打开页面就立即转接到了另外一个URL,为什么会有这么“奇怪”的写法?直接向客户端提供目标地址(URLLINK)不就可以了吗?什么情况下需要这么做呢?

一 个典型的场景是webapp中的首页设置(welcome page)。如果我们需要展示给用户的首页地址只是一个URL而不是一个真实存在的文件,比如/Index.action,那么在web.xml中直接将 Index.action作为welcome page进行设置是行不通的 — webapp将会报错:Index.action文件不存在。而解决方案就是编写一个非常简单的Index.html文件并将其作为首页,在该文件中指 定,一旦文件打开则立即重定向到Index.action:

<!DOCTYPE html><html><head><metahttp-equiv="refresh"content="0; url=Index.action"></head><body></body></html>

与别的方法(在HTTP服务器中设置301,302重定向规则,或在页面中使用JavaScript进行重定向)相比,通过meta标签来实现重定向的好处很明显:

  1. 简单易用。不需要在Web服务器上进行额外的配置,也不需要编写额外的脚本代码。
  2. 由HTML标准定义,主流浏览器均支持(模拟http响应头)。

shaochuancs@gmail.com

HTML Meta, http-equiv, Refresh的更多相关文章

  1. js刷新页面和跳转

    javascript返回上一页: 1.返回上一页 history.go(-1); 返回上两个页面 history.go(-2); <a href="javascript:history ...

  2. 第一篇:web之前端之html

    前端之html   前端之html 本节内容 前端概述 html结构 标签探秘 <!DOCTYPE html>标签 head标签 body标签 1.前端概述 一个web服务的组成分为前端和 ...

  3. 一丶HTML介绍

    import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('local ...

  4. html,css.javascript

    基本标签(a.p.img.li.table.div.span).表单标签.iframe.frameset.样式 1:Html  (Hypertext Markup Language) 超文本标记语言 ...

  5. NGINX: 统计网站的PV、UV、独立IP

    做网站的都知道,平常经常要查询下网站PV.UV等网站的访问数据,当然如果网站做了CDN的话,nginx本地的日志就没什么意义了,下面就对nginx网站的日志访问数据做下统计: 概念: UV(Uniqu ...

  6. 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 基本标签(a.p.img.li.table.div.span).表单标签.ifra ...

  7. 一、html

    一.html相关概念 html是 htyper text markup language 即超文本标记语言,超文本就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素,而标记语言:即标记(标签) ...

  8. meta标签用法总结

    注:本文并非本人撰写,摘自百度百科 meta标签用来描述一个HTML网页文档的属性,例如作者.日期和时间.网页描述.关键词.页面刷新等. 一.作用:       META标签是HTML标记HEAD区的 ...

  9. 【131031】<meta http-equiv=...> 的功能

    1.定义语言 格式: 〈meta http-equiv=″Content-Type″ content=″text/html; charset=gb2312″〉 这是META最常见的用法,在制作网页时, ...

随机推荐

  1. hibernate - Transaction not successfully started

    今天在测试 transaction(使用事务进行管理)的时候, 总报错: Transaction not successfully started 可能有多种原因, 这位哥们总结得很好: Transa ...

  2. js跨浏览器事件对象、事件处理程序

    项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节 ...

  3. CSS Positioning(定位)

    Positioning(定位) CSS定位属性允许你为一个元素定位.它也可以将一个元素放在另一个元素后面,并指定一个元素的内容太大时,应该发生什么. 元素可以使用的顶部,底部,左侧和右侧属性定位.然而 ...

  4. ios专题 - sandbox机制

    [原创]http://www.cnblogs.com/luoguoqiang1985 ios在安装APP时,把APP的偏好设置与数据放在sandbox里.sandbox通过一系列细颗粒度控制APP访问 ...

  5. tomcat gc问题总结

    Java内存泄露监控工具:JVM监控工具介绍  http://developer.51cto.com/art/201203/321431.htm 关于施用full gc频繁的分析及解决  http:/ ...

  6. jcarousellite 实现图片列表滚动

    jcarousel Lite与jcarousel 相比去掉了皮肤的约束,可以自定义的设置前后按钮和选项卡按钮,生成的html更加简洁,文件更小(2k) 下载链接:http://www.gmarwaha ...

  7. mws文件中的tab文件改为相对路径

    用mapinfo将现有的多个图层(tab)文件保存成一个mws工作空间后,将此mws文件发到另一台电脑上后,打开mws,提示无法打开各个tab文件,文件不存在,显示的路径是当时原电脑添加时的绝对路径. ...

  8. 2016022611 - redis订阅发布命令集合

    redis消息订阅发布命令 参考地址:http://www.yiibai.com/redis/redis_pub_sub.html 消息发送者发送消息,通过redis的channal,消息接收者获取消 ...

  9. 2016021903 - 下载安装使用Memory Analyzer

    Memory Analyzer是做什么的? 分析java程序中分析内存泄露问题. 1.下载Memory Analyzer Memory Analyzer下载地址:http://www.eclipse. ...

  10. "The connection for the USB device '###' was unsuccessful. The device is currently in use"

    一.问题描述 1.情景描述 笔者的物理主机系统是“windows7 64位”,想使用“摄像头录像大师”.这个软件在录制视频的过程中,需要调用windows自带的"windows media ...