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,然後傳送給客戶端。