Um das Thema erneut aufzugreifen:
Content-Type via HTTP hat eine andere Bedeutung als ursprünglich (MIME) vorgesehen.
Grundsätzlich ist, sofern es einen Message-Body im Request gibt, die Angabe eines Content-Type verpflichtend. Jedoch muss dieser nicht unbedingt dem MIME-Type des Body entsprechen. Das heißt, daß man kein
application/json angeben muss wenn der serverseitige Prozess ohnehin einen JSON-String erwartet. Sondern man gibt einen vereinbarten
Enctype an der beschreibt wie der serverseitige Prozess die gesendeten Daten zu verarbeiten hat, zB.
Enctype="multipart/form-data". In der Regel sendet man sog. Schlüsselparameter, so daß der Serverprozess nur wissen muß wie er die Schlüsselparameter zu parsen hat. Was bei bestimmten Schlüsselparametern zu tun ist gibt ja der Code vor.
Beispiel Schlüsselparameter:
store=1 => Body wird einfach als Datei gespeichert
ci=1 => Body wird in RCS eingecheckt
pub=1 => Body wird geparst, die gewonnene Datenstruktur wird in die im Speicher liegende Konfiguration eingehängt und die Konfiguration wird zurück auf die Fstplatte geschrieben.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $control = sub{
my $self = shift;
if( $self->param('pub') ){
my $hunt = $self->thaw(*STDIN);
my $h = $hunt->{1};
my $url = $h->{url};
$self->{BIN}{$url} = $h;
my $fh = IO::File->new;
$fh->open("$self->{FILEDIR}/dbf.bin", O_BINARY|O_RDWR|O_TRUNC|O_CREAT) or die $!;
$self->freeze($self->{BIN}, $fh );
$self->{CONTENT} = "Written: $url";
}
Anhand des letzten Beispiels sehen wir: Die Angabe des MIME-Types im Content-Type-Header ist der Anwendung völlig Wurscht. Denn die Anwendung bekommt ihre Schlüsselparameter aus dem an den URL angehängten QUERY_STRING.
Und der CGI-Prozess kommuniziert mit einem speziellen Client der den http-message-body in einem ganz besimmten (proprietären) Dateiformat liefert.
Last edited: 2024-08-04 11:28:25 +0200 (CEST)