【Nginx】MIME與mime.types

當你剛安裝完Nginx,打開默認的配置文件nginx.conf時,你會看到http上下文中有這一行配置:javascript

include       mime.types;

有的小夥伴就有疑問了:mime.types是什麼文件?在Nginx中又是什麼做用呢? 下面咱們就來看看,mime.types到底是怎麼回事。css

1、MIME與電子郵件

提及MIME,咱們首先要說說電子郵件。html

早期的電子郵件只能支持ASCII字符集,並且無法添加附件。後來,人們意識到電子郵件要想走向世界,必須支持更多的字符集,同時,可以隨着郵件發送附件也成爲愈來愈迫切的需求。在不斷的努力下,MIME——Multipurpose Internet Mail Extension(多用途因特網郵件擴展)於1992年誕生了。經過MIME,咱們能夠將不一樣類型的數據(文本、圖片、視頻)放到一條郵件中。好比,能夠寫一封既含有英文,又含有中文,再加上一個mp3音樂文件做爲附件的郵件。這種含有多種類型數據的文件被稱爲多部分對象集合(Multipart messages)。這就解決了咱們前面說的兩個問題。java

能夠說,沒有MIME,就沒有今天多姿多彩的互聯網。nginx

2、MIME與HTTP協議

除了支持電子郵件的SMTP協議之外,MIME還被其餘協議或者程序普遍使用着,這其中就包括大名鼎鼎的HTTP協議。HTTP服務器在發送一份報文主體時,在HTTP報文頭部插入解釋自身數據類型的MIME頭部信息(Content-Type)。客戶端接收到這部分有關數據類型的信息,就能調用相應的程序處理數據。有時候,這個程序是客戶端(瀏覽器)內置的,好比打開一個GIF圖片。有時候你須要先安裝一個插件,好比第一次觀看優酷的視頻前你通常須要安裝Flash插件。web

3、MIME與Nginx

打開Nginx配置文件中的mime.types,咱們能看到以下信息:json

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/javascript                js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;

    text/mathml                           mml;
    text/plain                            txt;
    text/vnd.sun.j2me.app-descriptor      jad;
    text/vnd.wap.wml                      wml;
    text/x-component                      htc;

    image/png                             png;
    image/tiff                            tif tiff;
    image/vnd.wap.wbmp                    wbmp;
    image/x-icon                          ico;
    image/x-jng                           jng;
    image/x-ms-bmp                        bmp;
    image/svg+xml                         svg svgz;
    image/webp                            webp;

    application/font-woff                 woff;
    application/java-archive              jar war ear;
    application/json                      json;
    application/mac-binhex40              hqx;
    application/msword                    doc;
    application/pdf                       pdf;
    application/postscript                ps eps ai;
    application/rtf                       rtf;
    application/vnd.apple.mpegurl         m3u8;
    application/vnd.ms-excel              xls;
    ....如下省略....

這裏形如text/html格式的字符串就是用來講明數據類型的,/前的是主類型,/以後的是該主類型下的子類型。詳細的類型定義在RFC2046中。Nginx經過服務器端文件的後綴名來判斷這個文件屬於什麼類型,再將該數據類型寫入HTTP頭部的Content-Type字段中,發送給客戶端。瀏覽器

好比,當咱們打開OSC的一個頁面,看到一個PNG格式的圖片的時候,Nginx是這樣發送格式信息的:服務器

  1. 服務器上有enter_narrow.png這個文件,後綴名是png;
  2. 根據mime.types,這個文件的數據類型應該是image/png;
  3. Content-Type的值設置爲image/png,而後發送給客戶端。

咱們在Chrome瀏覽器中能夠看到這個文件返回的頭部信息正如上文所寫的同樣:app

PNG

這就是mime.types的做用,小夥伴們瞭解了嗎?

相關文章
相關標籤/搜索