Przejdź do treści

Typy MIME

Typ MIME — wartość nagłówka Content-Type — to jak serwer mówi co plik jest. Nic z nazwy pliku nie dotrze do przeglądarki, więc rozszerzenie jest wskazówką dla Ciebie a typ jest faktą dla klienta. Pomylenie powoduje że arkusz stylów ignorowany, czcionka się nie ładuje, albo PDF pobiera się zamiast otworzyć.

Ta strona wymienia rozszerzenie i typ który jej własne narzędzie lookup zwraca, więc te dwie rzeczy nigdy się nie mogą rozjechać. Gdzie kilka rozszerzeń dzieli jeden typ — jpg, jpeg i jpe, albo yaml i yml — każdy jest wymieniony w swoim wierszu bo szukasz tego który masz.

Dwie reguły wyjaśniają większość niespodzianek poniżej. Typ zaczynający się na application/vnd. to rejestracja producenta nie otwarty standard — dlatego typy Office są takie długie. I typ którego serwer nie zna najlepiej wysyła się jako application/octet-stream, co mówi przeglądarce aby pobrała zamiast zgadywać.

Sieć i tekst

21

text/* to rodzina którą przeglądarka wyświetli zamiast pobierać, i jedyna gdzie parametr charset ma znaczenie — text/html; charset=utf-8.

RozszerzenieTyp MIMECzym to jest
.htmltext/htmlDokument HTML
.htmtext/htmlDokument HTML, krótkie rozszerzenie
.shtmltext/htmlHTML z server-side includes
.xhtmlapplication/xhtml+xmlDokument XHTML
.csstext/cssArkusz stylów
.csvtext/csvWartości oddzielone przecinkami
.txttext/plainZwykły tekst
.mdtext/markdownŹródło Markdown
.icstext/calendarZdarzenie kalendarza
.xmlapplication/xmlDokument XML
.jstext/javascriptJavaScript
.mjstext/javascriptModuł JavaScript ES
.jsonapplication/jsonDane JSON
.jsonldapplication/ld+jsonStrukturalne dane JSON-LD
.webmanifestapplication/manifest+jsonManifest aplikacji sieciowej
.yamlapplication/yamlDokument YAML
.ymlapplication/yamlYAML, krótkie rozszerzenie
.tomlapplication/tomlKonfiguracja TOML
.sqlapplication/sqlSkrypt SQL
.shapplication/x-shSkrypt powłoki
.wasmapplication/wasmModuł WebAssembly

Dokumenty

12

Typy Office są długie bo kodują producenta, standard i część — vnd. oznacza rejestrację producenta nie otwarty format.

RozszerzenieTyp MIMECzym to jest
.pdfapplication/pdfDokument PDF
.rtfapplication/rtfTekst sformatowany
.docapplication/mswordDokument Word, stary binarny
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentDokument Word
.xlsapplication/vnd.ms-excelSkoroszyt Excel, stary binarny
.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetSkoroszyt Excel
.pptapplication/vnd.ms-powerpointPrezentacja PowerPoint, stara binarna
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentationPrezentacja PowerPoint
.odtapplication/vnd.oasis.opendocument.textTekst OpenDocument
.odsapplication/vnd.oasis.opendocument.spreadsheetArkusz OpenDocument
.odpapplication/vnd.oasis.opendocument.presentationPrezentacja OpenDocument
.epubapplication/epub+zipKsiążka elektroniczna EPUB

Obrazy

14

Każdy typ obrazu sniff się z pierwszych bajtów, więc przeglądarka zwykle go renderuje poprawnie nawet przy błędnym napisie z serwera. Wyjątek który nigdy nie powinieneś błędnie oznaczyć to SVG — to dokument który może niosą skrypt.

RozszerzenieTyp MIMECzym to jest
.pngimage/pngObraz PNG
.jpgimage/jpegObraz JPEG
.jpegimage/jpegObraz JPEG, długie rozszerzenie
.jpeimage/jpegObraz JPEG, rzadkie rozszerzenie
.gifimage/gifObraz GIF
.webpimage/webpObraz WebP
.avifimage/avifObraz AVIF
.svgimage/svg+xmlObraz wektorowy SVG
.bmpimage/bmpObraz bitmapowy
.icoimage/vnd.microsoft.iconPlik ikony
.tifimage/tiffObraz TIFF
.tiffimage/tiffObraz TIFF, długie rozszerzenie
.heicimage/heicObraz HEIC
.heifimage/heifObraz HEIF

Dźwięk

11

Kontener i kodek to dwa różne pytania. audio/ogg mówi jak plik jest zawinięty; wewnątrz może być Vorbis, Opus albo FLAC.

RozszerzenieTyp MIMECzym to jest
.mp3audio/mpegDźwięk MP3
.wavaudio/wavDźwięk WAV
.oggaudio/oggDźwięk Ogg
.ogaaudio/oggDźwięk Ogg, wyraźne rozszerzenie
.opusaudio/opusDźwięk Opus
.m4aaudio/mp4Dźwięk AAC w kontenerze MP4
.flacaudio/flacDźwięk bezstratowy FLAC
.webaaudio/webmDźwięk WebM
.aacaudio/aacSurowy dźwięk AAC
.midaudio/midiSekwencja MIDI
.midiaudio/midiMIDI, długie rozszerzenie

Wideo

9

Strumieniowanie wideo wymaga więcej niż właściwy typ — serwer musi też odpowiadać na żądania zakresu, inaczej przeglądarka pobiera cały plik zanim zacznie odtwarzać.

RozszerzenieTyp MIMECzym to jest
.mp4video/mp4Wideo MP4
.m4vvideo/mp4Wideo MP4, rozszerzenie Apple
.webmvideo/webmWideo WebM
.ogvvideo/oggWideo Ogg
.movvideo/quicktimeWideo QuickTime
.avivideo/x-msvideoWideo AVI
.mkvvideo/x-matroskaWideo Matroska
.wmvvideo/x-ms-wmvWideo Windows Media
.3gpvideo/3gppMobilne wideo 3GPP

Czcionki

5

Rodzina font/* została zarejstrowana późno; stare narzędzia jeszcze wysyłają application/font-woff i application/x-font-ttf, które przeglądarki akceptują ale nie powinny być pisane dla czegokolwiek nowego.

RozszerzenieTyp MIMECzym to jest
.wofffont/woffCzcionka sieciowa WOFF
.woff2font/woff2Czcionka sieciowa WOFF2
.ttffont/ttfCzcionka TrueType
.otffont/otfCzcionka OpenType
.eotapplication/vnd.ms-fontobjectEmbedded OpenType, tylko Internet Explorer

Archiwa i binaria

12

application/octet-stream to uczciwa odpowiedź gdy nic lepsze nie jest znane, i to też co wymusza pobranie zamiast renderowanie.

RozszerzenieTyp MIMECzym to jest
.zipapplication/zipArchiwum ZIP
.gzapplication/gzipArchiwum gzip
.tarapplication/x-tarArchiwum tar
.7zapplication/x-7z-compressedArchiwum 7-Zip
.rarapplication/vnd.rarArchiwum RAR
.bz2application/x-bzip2Archiwum bzip2
.isoapplication/x-iso9660-imageObraz dysku
.binapplication/octet-streamNieznane dane binarne
.exeapplication/x-msdownloadPlik wykonywalny Windows
.apkapplication/vnd.android.package-archivePakiet Android
.debapplication/vnd.debian.binary-packagePakiet Debian
.swfapplication/x-shockwave-flashFilm Flash, dawno przestarzały

Częste pytania

Co się dzieje gdy typ MIME jest błędny?
Zależy od typu. Przeglądarki celowo odrzucają arkusz stylów który nie przychodzi jako text/css i skrypt modułu który nie przychodzi jako typ JavaScript. Obrazy sniffuje się z pierwszych bajtów i zwykle przetrwają błędny napis. A cokolwiek posłane jako text/plain wyświetla się zamiast pobierać.
Czy poprawne jest text/javascript czy application/javascript?
text/javascript. To była historyczna forma, application/javascript ją zastąpił, i obecny standard wrócił do text/javascript i oznaczył drugą jako przestarzałą. Każda przeglądarka przyjmuje obydwa, więc to ma znaczenie tylko dla tego co piszesz w nowej konfiguracji.
Dlaczego typ Word .docx jest taki długi?
Bo koduje całą ścieżkę do formatu: rejestrację producenta (vnd.), rodzinę OOXML i który to dokument tej rodziny. Długość to cena za wpis rejestru który nie może się zderzać z niczyim.
Czy potrzebuję charset przy każdym typie?
Tylko przy typach tekstowych i praktycznie tylko gdzie domyślne byłoby błędne. text/html; charset=utf-8 warto być jawnym; image/png; charset=utf-8 nie ma sensu. JSON jest już zdefiniowany jako UTF-8, więc application/json nie bierze charset.
Jak szybko jeden wyszukać?
Narzędzie lookup typu MIME na tej stronie konwertuje listę rozszerzeń na typy albo typy wstecz na rozszerzenia i potrafi wyemitować wynik jako blok konfiguracji nginx albo Apache.