Schlagwort-Archive: HTTP

HTTP-Header

Zusätzliche HTTP-Header definieren für statische Webseiten bei Webhoster

Verschiedene, teilweise sicherheitsrelevante Funktionalitäten können durch HTTP-Header aktiviert werden, so zum Beispiel die HTTP Strict Transport Security.

Wenn man eine dynamisch generierte Webseite (z.B. via php) hat kann man relativ einfach zusätzliche HTTP-Header definieren, die ausgeliefert werden sollen. Bei php kann dies z.B. mit der Funktion header() erreicht werden.

Bei statischen Webseiten gibt es diese Möglichkeit nicht. Oftmals hostet man solche Webseiten unter einem einfachen (shared) Hosting, für welches der Webhoster (in meinem Fall Hostpoint) oftmals in seiner Verwaltungsoberfläche keine Möglichkeit bietet die Header anzupassen.

Wenn die Webseiten mit dem Apache HTTP Server ausgeliefert werden und der Webhoster das Modul mod_headers aktiviert hat können über Einträge in der Datei .htaccess zusätzliche Header gesetzt werden.

Um zu überprüfen, ob der Mechanismus funktioniert kann ein Dummy-Header ausgegeben werden, der dann über die Entwicklerwerkzeuge des Browsers geprüft werden kann. Dies ist ungefährlich, da unbekannte Header vom Browser ignoriert werden. So kann z.B. folgende Zeile in der .htaccess-Datei im passenden Verzeichnis hinzugefügt werden:

Header add Test Debug

Dabei muss darauf geachtet werden, ob ein Bereich in der .htaccess-Datei für automatische Einträge durch die Verwaltungsoberfläche des Hosters reserviert ist. Falls die Datei noch nicht existiert kann sie mit der obigen Zeile als einzigem Inhalt neu erzeugt werden.

Wenn das Ganze erfolgreich war sollte im Antwort-Header eine Zeile mit folgendem Inhalt vorhanden sein:

Test: Debug

Wenn dies erfolgreich war kann der Test-Eintrag wieder gelöscht und der richtige Header definiert werden. Ansonsten sollte der Eintrag nochmals kontrolliert oder dann der Support des Hosters kontaktiert werden.

Mehrere Content-Type in HTTP-Header

Aufgrund der Probleme mit mehreren Content-Type-Elementen im HTTP-Header wollte ich wissen, was der Standard dazu meint.

Das Hypertext Transfer Protocol (HTTP) in der Version 1.1 ist im RFC 2616 beschrieben.

In Kapitel 4.2: Message Headers, letzter Abschnitt, ist allgemein zu mehreren Feldern mit dem selben Namen zu lesen:

Multiple message-header fields with the same field-name MAY be present in a message if and only if the entire field-value for that header field is defined as a comma-separated list [i.e., #(values)].

Als Beispiel schauen wir uns Kapitel 14.1: Accept an:


Accept         = "Accept" ":"
                        #( media-range [ accept-params ] )

Nun schauen wir uns im Kapitel 14.17: Content-Type die Definition desselbigen an:


Content-Type   = "Content-Type" ":" media-type

Nach dem Standard ist folglich die Aussage bei TCPDF falsch, es sei ein Bug von FastCGI. Es ist TCPDF, das sich nicht an den Standard hält.
Da die Browser aber damit zurecht kommen und auch bei anderen Anwendungen mehrere Content-Type Werte zurückgeliefert werden, wäre es für die Kunden von Web-Hostern hilfreich, wenn FastCGI etwas toleranter wäre.

Piwik PDF Reports bei Hostpoint (mit FastCGI)

Seit Version 0.7 können mit Piwik PDF Reports erzeugt werden. Als PDF-Bibliothek wird dabei TCPDF eingesetzt.
Bei Hostpoint erzeugt TCPDF aber Probleme. Beim Download des Reports wird folgender Fehler im ErrorLog angezeigt:
[error] [client ###.###.###.###] FastCGI: comm with server „/var/run/hcgi/86“ aborted: error parsing headers: duplicate header ‚Content-Type‘, referer: http://###.######.##/index.php?module=PDFReports&action=index&idSite=2&period=day&date=yesterday

Der Fehler wird durch die TCPDF Bibliiothek ausgelöst, da sie mehrere Content-Type Header-Elemente erzeugt und FastCGI dies nicht unterstützt.

Um die Reports doch herunterladen zu können müssen in der Datei tcpdf.php die Zeilen 7221-7223 (bei der in Piwik 0.9 eingesetzten TCPDF Version 5.5.009) auskommentiert werden, so dass nur noch der Content-Type „application/download“ ausgeliefert wird:

// force download dialog
// header('Content-Type: application/force-download');
// header('Content-Type: application/octet-stream', false);
// header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);

Laut TCPDF ist dies ein FastCGI Bug. Mit diesem Hack ist es (zumindest mit Internet Explorer 8 und Firefox 3.6) möglich, den Report herunterzuladen, nach jedem Piwik Update muss aber der Eintrag wieder angepasst werden.