English

HTTP header

Har du någonsin fått felmeddelandet: "CGI Error: The specified CGI application misbehaved by not returning a complete set of HTTP headers."? Då är det troligt att du stött på en inkorrekt HTTP header. Det exakta felmeddelandet kan variera mellan olika program, men orsaken är alltid den samma.

När en webbläsare ska ta emot en fil förväntar den sig först att få en HTTP header - en ettikett som talar om vad det är för sorts fil. Denna ettikett kallas vanligen för mime-typ och det är denna webbläsaren använder för att avgöra vad den ska göra med filen den får. Vanliga mime-typer är audio/mpeg, image/png och application/zip. Även en vanlig sida med ren text eller HTML-kod måste förses med en mime-typ. De som används då är text/plain och text/html.

När man klickar på en länk och en webbserver skickar en vanlig sida till läsaren så kommer servern att förse sidan med en mime-typ automatiskt. Men om det är ett CGI-skript som genererar sidan så skickas bara precis det som skriptet spottar ur sig. En vanlig webbserver lägger inte till något extra på det som genereras. Det är därför viktigt att se till att alla CGI-skript som genererar filer som ska skickas till en webbläsare även skickar med en mime-typ som presenterar innehållet. Detta gäller naturligtvis även i andra sammanhang där man pratar med webbläsare - till exempel om man skriver en egen webbserver.

Det räcker dock inte med bara mime-typen. Man måste ha rätt format runt den också för att allt ska fungera. En korrekt HTTP header för en HTML-sida är:

HTTP header

    Content-type: text/html

    Här börjar den vanliga sidan...
  

Observera den tomma raden mellan mime-typen och det resterande innehållet. För exempel på hur detta kan se ut finns det flera olika CGI här i källkodskällan.

Om webbläsaren inte får en HTTP header eller om den är är felaktig vill den oftast inte öppna filen och istället får man ett felmeddelande i stil med det ovan.