1. 程式人生 > >mime.types 與 nginx配置

mime.types 與 nginx配置

一、什麼是MIME-TYPE

MIME——Multipurpose Internet Mail Extension(多用途因特網郵件擴充套件)最初是為了滿足電子郵件支援多字符集及附件而出現的。
通過MIME,我們可以寫一封既含有英文,又含有中文,再加上一個檔案作為附件的郵件。這種含有多種型別資料的檔案被稱為多部分物件集合(Multipart messages)。
MIME Type 不是個人指定的,是經過 ietf 組織協商,以 RFC 的形式作為建議的標準釋出在網上的,大多數的 Web 伺服器和使用者代理都會支援這個規範

二、MIME與HTTP協議

除了支援電子郵件的SMTP協議以外,MIME還被其他協議或者程式廣泛使用著,這其中就包括大名鼎鼎的HTTP協議。HTTP伺服器在傳送一份報文主體時,在HTTP報文頭部插入解釋自身資料型別的MIME頭部資訊(Content-Type)。
MIME-type和Content-Type的關係:


當web伺服器收到靜態的資原始檔請求時,依據請求檔案的字尾名在伺服器的MIME配置檔案中找到對應的MIME Type,再根據MIME Type設定HTTP Response的Content-Type,然後客戶端如瀏覽器根據Content-Type的值處理檔案。

三、MIME與Nginx

nginx.conf配置檔案http指令塊有如下預設指令

http {
    include       mime.types;
    default_type  application/octet-stream;

include表示納入mime.types檔案的配置,
如果nginx.conf有重複的指令,可以抽取出來,利用include來幫我們簡化配置,避免修改一個相同的配置,要改動好幾個地方。

incluee   xxx.conf;

default_type
如果Web程式沒設定,Nginx也沒找到對應檔案的副檔名的話,就使用預設的Type,這個在Nginx 裡用 default_type定義: default_type application/octet-stream,這是應用程式檔案型別的預設值。

application/octet-stream
是HTTP規範中Content-Type的一種,意思是 未知的應用程式檔案 ,瀏覽器一般不會自動執行或詢問執行。
只能提交一個二進位制,如果提交檔案的話,只能提交一個檔案,後臺接收引數只能有一個,而且只能是流(或者位元組陣列)。

conf/mime.type檔案內容如下:



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/svg+xml                                    svg svgz;
    image/tiff                                       tif tiff;
    image/vnd.wap.wbmp                               wbmp;
    image/webp                                       webp;
    image/x-icon                                     ico;
    image/x-jng                                      jng;
    image/x-ms-bmp                                   bmp;

    application/font-woff                            woff;
    application/java-archive                         jar war ear;
    application/json                                 json;
    application/mac-binhex40                         hqx;
	...

這裡形如text/html格式的字串就是用來說明資料型別的,/前的是主型別,/之後的是該主型別下的子型別。詳細的型別定義在RFC2046中。
Nginx通過伺服器端檔案的字尾名來判斷這個檔案屬於什麼型別,再將該資料型別寫入HTTP頭部的Content-Type欄位中,傳送給客戶端。

比如,當我們開啟OSC的一個頁面,看到一個PNG格式的圖片的時候,Nginx是這樣傳送格式資訊的:

伺服器上有enter_narrow.png這個檔案,字尾名是png;
根據mime.types,這個檔案的資料型別應該是image/png;
將Content-Type的值設定為image/png,然後傳送給客戶端。
在這裡插入圖片描述