Favicon

<image>

Favicon是favorites icon的缩写，亦被称为website icon（网站图标）、page icon（页面图标）或urlicon（URL图标）。Favicon是与某个网站或网页相关联的图标。网站设计者可以多种方式建立这种图标，而目前也有很多网页浏览器支持此功能。浏览器可以将favicon显示于浏览器的地址栏中，也可置于书签列表的网站名前，还可以放在标签式浏览界面中的页标题前。

最初，定义一个favicon的方法是将一个名为“favicon.ico”的文件置于Web服务器的根目录下，Internet Explorer的收藏夹（即书签）可以自动显示该文件。后来出现了一种更为灵活的方法，即使用HTML来为任何一个网页指示其图标所存储的位置。这种方法是通过在页面的`<head>`部分添加两个link元件来实现的。这样，任何一个适当大小的（16×16像素或更大）的图像都可以用作favicon。尽管如此，多数情况下仍然使用ICO格式。其他网页浏览器现在也支持PNG格式，和GIF动画图像格式。

市面上多数浏览器同时支持上述两种方法。正因此，网络服务器要接受很多对“favicon.ico”文件的请求，即使该文件根本不存在。网站管理员对此很不满，因为这样会增加大量的服务器日志项，并导致很多不必要的磁盘读取和CPU、网络资源的占用。另一个常见的问题是，当清除浏览器的缓存后，favicon可能会消失。

## 历史

1999年3月，Internet Explorer最早仅仅将favicon用于收藏夹（例如MSIE 5.0）。这产生了一些关于隐私问题的考虑，因为网站拥有者可以通过检查访问日志察看有多少人下载了`favicon.ico`文件，判断有多少人将他们的网站放入收藏夹中。然而，自从许多其他浏览器开始在每次访问时都将favicon显示在地址栏上，这就不再是一个问题了。

### 标准化

Favicon功能最早由微软公司创设，而微软的Internet Explorer浏览器会对每一个网站都请求favicon。微软支持的link标签不遵从World Wide Web Consortium（W3C，万维网联盟）的HTML建议，因为：

- `rel`属性必须包含一个用空格作分隔符的link类型的列表，所以一个包含两词的link类型不能被遵守标准的浏览器理解。
- “.ico”文件类型（一种用于Windows上图标的位图格式）没有一个注册的MIME类型，而且似乎在当时也不能被多数浏览器理解。然而2003年，这一格式在IANA获得注册，其MIME类型是image/vnd.microsoft.icon，进而消除了此问题的第一部分。
- 在网站上使用保留地址（reserved location）与 Architecture of the World Wide Web（互联网的结构）矛盾，同时被认为是link squatting（链接劫持）或URI squatting（URI劫持）。

Mozilla浏览器通过一种遵从Web标准的方法添加了对favicon的支持。它采用`rel="icon"`并允许网络设计人员添加任何支持的图像格式的favicon。例如`<link rel="icon" type="image/png" href="/path/image.png" />`。后来鉴于此功能将被用于所有新内容，多数浏览器都对此功能增加了支持。

根据《HTML 4.01 Specification W3C Recommendation 24 December 1999》，rel属性的取值仅有：

- Alternate
- Stylesheet
- Start
- Next
- Prev
- Contents
- Index
- Glossary
- Copyright
- Chapter
- Section
- Subsection
- Appendix
- Help
- Bookmark

如果要采用其他值，应当在head标签中的profile属性中进行自定义。

- 在head标签中添加profile属性指向 http://www.w3.org/2005/10/profile。
- 用link标签指向Favicon URI，rel值为icon

一个常见的错误是不指定profile。

## 指导

过去，为保证favicon出现，网站设计者和开发者采用了多种方法。很难完全保证favicon可以在所有电脑上显示，即使是用同一版本的一种浏览器。

下列代码另一个局限就是它把favicon关联到了某个特定的HTML或XHTML文档上。为避免这一点，favicon.ico文件应置于根目录下。多数浏览器将自动检测并使用它。

```html4strict
<link rel="shortcut icon" href="http://example.com/favicon.ico" type="image/vnd.microsoft.icon" />
<link rel="icon" href="http://example.com/favicon.ico" type="image/vnd.microsoft.icon" />
```

然而，只有第一行是必须的，因为“shortcut icon”字符串将被多数遵守标准的浏览器识别为列出可能的关键词（“shortcut”将被忽略，而仅使用“icon”）；而Internet Explorer将会把它作为一个单独的名称（“shortcut icon”）。这样做的结果是所有浏览器都可以理解此代码。只有当希望为新浏览器提供另一种备用图像（例如动画GIF）时，才有必要添加第二行。

- 在HTML中，`link`元件必须在`head`元件里（在`<head>`和`</head>`之间）。
- 对于XHTML，link必须使用“`/>`”结束（或“`>&lt;/link&gt;`”），而不可以使用“`>`”结束。
- `href`可以，但不必指向`/favicon.ico`的位置。它可以指向任何URL。
- 图像通常可以使用任何被浏览器支持的图像格式。
- `.ico`文件格式通常可以被所有可以显示favicon的浏览器读取。
- 设置服务器，以发送正确的MIME标识：
- ICO 文件 `image/vnd.microsoft.icon`（或者亦可出于兼容性原因使用`image/x-icon`。然而最好使用 IANA注册的MIME类型，因为多数主流浏览器现在支持它）
- GIF 文件 `image/gif`
- PNG 文件 `image/png`
- 使用适当的分辨率和色深。
- ICO：包括多种分辨率（最常使用的是16×16和32×32，Mac OS X有时使用64×64和128×128）以及位深（比特每像素）（多数使用4、8、24 bpp，即16、256和1600万色）。
- GIF：使用16×16，256色。
- PNG：使用16×16，256色或24位。

注意：当`favicon.ico`被置于文档根目录时，将会被一些不处理`link`元件的浏览器找到，即使没有您的站点上没有指向它的链接。

## 外部链接

- W3C网络标准化组织关于如何添加favicon的建议
- 如何使用PHP添加favicon。
- MSDN Library: Win32的图标
- Online favicon editor: 在线制作Favicon图标
- Computers/Internet/Web_Design_and_Development/Authoring/Online_Tools/Graphics/Image_Generation/Favicons/（有些过时的信息）
- MSDN Library: 自定义站点图标