Hvad er en MIME type?

Du kender sikkert filendelser, og du ved sikkert at .txt er et tekstdokument, .doc er et MS Worddokument, .htm er et HTML-dokument og så videre. Disse filendelser er meget smarte til at finde ud af hvilken fil der skal åbnes i hvilket program på computeren, men på internettet dur de ikke. Der er hovedsageligt to problemer med filendelserne: (1) De er ikke standardiseret, og der findes ofte flere programmer, som bruger samme filendelse til forskellige formål. (2) Filendelsen siger ikke altid noget om indholdet, og den er ikke altid synlig. Eksempelvis vil en fil med filendelsen .php eller .aspx ofte være et HTML-dokumet, når det bliver sendt til browseren, men den har ikke filendelsen .htm. Et andet eksempel er denne hjemmeside. Her står slet ikke noget filnavn i adressen, men kun et mappenavn, og filendelsen er derfor usynlig.

Man har derfor måttet lave et alternativt system til internettet, som ikke havde disse mangler. Systemet er en del af MIME. Jeg har samlet en lille liste over forskellige MIME types:

MIME types, som er særligt relevante for hjemmesider
FiltypeTypiske filendelserMIME type
HTML-dokument .html .htm text/html
XHTML-dokument.xhtml application/xhtml+xml
Stylesheet .css text/css
PNG-billede .png image/png
JPEG-billede .jpg .jpeg image/jpeg
GIF-billede .gif image/gif
JavaScript .js application/javascript
tekstfil .txt text/plain
ZIP-arkiv .zip application/zip

Når en side sendes over nettet, bør MIME typen altid være angivet, med mindre modtageren allerede kender typen. I tilfældet, at det er en hjemmeside, kender modtageren ikke typen, da det er en webbrowser. Webbrowsere kan læse alt fra html, css og billeder til downloads som eksempelvis zip- eller exe-filer. Har man med hjemmesider at gøre, skal MIME typen derfor altid oplyses.

MIME types i HTTP

Når en hjemmeside bliver sendt fra din server til brugerens browser, bliver den sendt over HTTP (det vidste du nok i forvejen). Her er et simpelt eksempel på, hvordan en hjemmeside ser ud, når den sendes over HTTP:

HTTP/1.1 200 OK
Date: Sat, 03 Mar 2007 16:17:46 GMT
Content-Length: 308
Content-Type: application/xhtml+xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testside</title>
</head>
<body>
<h1>Test</h1>
<p>Dette er en <a href="http://jesperkristensen.dk/">testside</a></p>
</body>
</html>

Øverst er de såkaldte HTTP headers, nederst er selve indholdet. I dette eksempel er det et XHTML-dokument. Jeg har lavet et lille værktøj, hvori du kan slå en hvilken som helst side op og se kilden inklusiv HTTP headers. Prøv at bruge værktøjet på din egen side.

Ekstra information: Eksemplet herover vil ikke kunne læses af Internet Explorer 8 eller ældre, da det er et XHTML-dokument, og Internet Explorer kan ikke læse XHTML-dokumenter.

I forbindelse med MIME types er det den fjerde linje i eksemplet, der er interessant:

Content-Type: application/xhtml+xml

Slår du din egen side op i førnævnte værktøj, skulle du også gerne finde en lignende linje. Findes der ikke sådan en linje, er det et problem. (Jeg vil gerne have sagt fejl, men det vil være forkert at sige her, så jeg nøjes med at sige problem.). Linjen fortæller om sidens MIME type.

Ofte set fejl: En af de mere hyppige fejl i forbindelse med mime types er, at andre filtyper identificeres som HTML. Kontroller at dine CSS filer sendes med typen text/css, og ikke typen text/html.

Sådan indsætter du en Content-Type header

Hvis du bruger PHP, er det nemmeste at indsætte følgende stump, hvis du vil sende et dokument, som ikke er HTML (PHP antager at outputtet er HTML med mindre du angiver andet):

<?php header('Content-Type: image/jpeg'); ?>

MIME type parametre

En MIME type kan have forskellige parametre. En ofte brugt parameter er "charset", som angiver tegnkodningen. I HTML kan man angive tegnkodningen to steder: I Content-Type headeren eller i selve HTML-dokumentet. Man kan selv vælge om man vil angive tegnkodnongen det ene sted, det andet sted eller begge steder. Angiver man ikke tegnkodningen nogen af stederne, vil nogen brugere ikke kunne se hjemmesiden korrekt. Det er en fordel at lade tegnkodningen være angivet i selve dokumentet, da oplysningen ellers ville gå tabt, hvis brugeren gemmer en side på sin computer.

Content-Type: application/xhtml+xml; charset=UTF-8