Favicon

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: 自定義站點圖標