AJAX -- HTTP Request- und Response Header nutzen

Ein HTTP-Header erlaubt die Übertragung von strukturierten Daten über dem Message-Body

Das XHR-Object erlaubt zum einen, mit xhr.setRequestHeader() einen bestimmten Header für den Request zu setzen. Zum Anderen ist es auch möglich, mit xhr.getResponseHeader() bestimmte Header der Response zu ermitteln.

Damit ergeben sich einige Vereinfachungen, z.B. in der Fehlerbehandlung:

# serverseitig
if( $day eq 'null'){
    return
    $self->header(
        'x-errstr' => uri_escape("Dieses Türchen hatten Sie schon aufgemacht!")
    );
}

# clientseitig
function query_callback(e){
    if( e.target.getResponseHeader('x-errstr') ){
        return alert( decodeURIComponent(e.target.getResponseHeader('x-errstr')));
    }
}

Mit einer solchen Vorgehensweise ist es möglich, die Fehlerbehandlung vom Message-Body vollständig zu trennen, ein Eingriff in im Message-Body vorliegende XML oder JSON Strukturen ist nicht mehr notwendig. Der HTTP-Message-Body steht somit auch der Übertragung ganzer Dateiinhalte zur Verfügung für Upload oder Download. Gleichermaßen zeigt obenstehender Code die Anwendung der Prozentkodierung, bekanntlich dürfen HTTP-Header ja nur ASCII-Zeichen enthalten.

Weitere Möglichkeiten

Prozentkodiert lässt sich ein ganzer QUERY_STRING natürlich auch in einer einzigen Header-Zeile unterbringen. D.h., dass ein HTTP-Header auch strukturierte Daten enthalten kann. Über die maximale Länge eines HTTP-Headers fand ich unterschiedliche Angaben bis zu 8kb was wohl für die meisten Fälle ausreichen dürfte.

Demo: Laden einer Grafik mit Beschreibung

Die Binary der Grafik wird im Message-Body und die Beschreibung in einem Header der Response gesendet.


Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.