Apache Content Negotiation
alfie
- webserver
Hallo!
Ich habe Testseiten zur automatischen Sprachauswahl erstellt (Apaches Multiview ist aktiviert), und zwar
index.htm.de (deutsch)
index.htm.en (english)
index.htm.htm (=index.htm.en)
Eigenartigerweise zeigt mir mein Moz1.7.1 bei folgender Spracheinstellung (1. Deutsch/Österreich [de-at], 2. Englisch [en]) zuerst die englische Seite an.
Der IE6 verhält sich wie von mir erwartet (oder besser erhofft): zuerst kommt die deutsche Seite.
zu testen unter http://langtest.maloer.org/
Könnt ihr das nachvollziehen und/oder erklären?
mfg Alfie
Hallo!
Bei 1. [de] und 2. [en] im Mozilla klappt's.
Anscheinend erkennt der Apache die Anforderung des Moz [de-at] nicht als Klasse von [de] und liefert daher den Default [index.htm.htm] aus. Wieso aber gerade vom IE aus schon?
mfg Alfie
Hallo!
Langsame Klärung - in Form eines Monologs (http://www.schroepl.net/cgi-bin/http_trace.pl) sei's gedankt...
1. im IE war bei mir [de] (und nicht [de-at]) an erster Stelle, mit [de-at] verhalten sich beide Browser gleich, d.h.
HTTP request sent to server
headers:
[ 31] Accept-Language: de-at,en;q=0.5
[ 25] Host: langtest.maloer.org
HTTP response headers received from server:
[ 31] Vary: negotiate,accept-language
[ 20] Content-Language: en
[ 30] Content-Location: index.htm.en
[ 23] Content-Type: text/html
d.h. [de-at] wird nicht als [de] erkannt (sonst müsste der Apache ja index.htm.de ausliefern. Eine unbekannter Language-Request müsste aber index.htm.htm und nicht index.htm.en liefern?
Oder ist plötzlich [de-at] eine Klasse von [en] ;-)
mfg Alfie
Hallo Alfie,
serverseitig stellst Du soetwas mit den Anweisungen aus http://httpd.apache.org/docs-2.0/mod/mod_mime.html#addlanguage des zweiten Beispiels ein.
Gruß aus Berlin!
eddi
Hallo eddi!
Grossartig! Ich denke, genau das war's!
mfg Alfie
Hallo,
serverseitig stellst Du soetwas mit den Anweisungen aus http://httpd.apache.org/docs-2.0/mod/mod_mime.html#addlanguage des zweiten Beispiels ein.
Grossartig! Ich denke, genau das war's!
Ein Problem gibt's immer noch: Die Besucher, die zum Beispiel nur de-ch eingestellt haben, landen noch immer auf der englischen Seite. Das wirst Du allerdings so nicht beheben können, da sich mehrere AddLanguage-Direktiven zur gleichen Extension gegenseitig überschreiben:
If multiple language assignments are made for the same extension, the last one encountered is the one that is used. That is, for the case of:
AddLanguage en .en
AddLanguage en-gb .en
AddLanguage en-us .endocuments with the extension .en would be treated as being en-us.
Wenn Du nun also ein AddLanguage de-ch .de hinten dran hängst, dann wirst Du mit Deinem östereichischen Browser wieder auf der englischen Seite landen.
Das Problem liegt aber beim User: Jeder, der meint, eine lokalisierte Sprachversion einstellen zu müssen, sollte als erste Alternative immer seine nicht weiter lokalisierte Sprache angeben. Also niemals de-de, de-at, de-ch, de-lu etc. ohne einzelnes de.
Viele Grüße
Carsten
Das Problem liegt aber beim User: Jeder, der meint, eine lokalisierte Sprachversion einstellen zu müssen, sollte als erste Alternative immer seine nicht weiter lokalisierte Sprache angeben.
Mach das mal dem User (DAU) klar!
Das Problem liegt bei den Browserherstellern, das UI so zu gestalten, dass der Nutzer immer seine nicht weiter lokalisierte Sprache angibt.
Viele Grüße,
Gunnar
Hallo Gunnar,
Das Problem liegt aber beim User: Jeder, der meint, eine lokalisierte Sprachversion einstellen zu müssen, sollte als erste Alternative immer seine nicht weiter lokalisierte Sprache angeben.
Mach das mal dem User (DAU) klar!
Das Problem liegt bei den Browserherstellern, das UI so zu gestalten, dass der Nutzer immer seine nicht weiter lokalisierte Sprache angibt.
Es ist zwar schon Ewigkeiten her, daß ich das letzte Mal den "de-at Mozilla" von < http://mozilla.kairo.at/> installiert hatte, aber wenn ich mich recht erinnere, dann war hier zusätzlich zu de-at auch de eingestellt (man möge mich bitte korrigieren, wenn mich meine Erinnerung trügt). Und der deutsche Mozilla, denn man von < http://www.mozilla.org> bekommt, kommt auch mit de-de _und_ de daher. Wenn hier also mit voller Absicht eine Spracheinstellung rausgelöscht wird, dann _ist_ es ein User-Problem... ;-)
Viele Grüße
Carsten
Hallo Carsten!
Deprimierend. Es wäre einfach zu schön gewesen, automatische alle nichtvorhandenen Klassen der entsprechenden Familie zuzuordnen (also de-at, de-ch, de-lu, de-li zu de).
mfg Alfie
alfie,
Deprimierend. Es wäre einfach zu schön gewesen, automatische alle nichtvorhandenen Klassen der entsprechenden Familie zuzuordnen (also de-at, de-ch, de-lu, de-li zu de).
It could well be argued that RFC2616 has made an unfortunate choice in this regard, due to its counter-intuitive behaviour. It's at least plausible that if the server had no British English variant then the best way to respond to a request for en-GB would be to return a generic English variant, and that the user should be expected to take some additional action (such as including "en;q=0" amongst their preferences) if they want to indicate rejection of a generic variant.
(http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html)
Und zu meinem Einwand ebenda:
RFC2616 puts the responsibility on the browser designer to assist the user in understanding the consequences of this rule and to help them in including the generic language in their list if this is their intention (I know of no browser which actually offers this assistance!).
Gunnar
Hallo Gunnar!
Danke für den Link, ist sehr aufschlussreich.
mfg Alfie
Hallo Alfie,
es gäbe auch noch die Möglichkeit dies mit Environment Variables zu behandeln und mit den dementsprechenden Modulen gegenzusteuern. Aber das habe ich selbst noch nicht veranstaltet. Im Gegenteil habe ich bei einem Projekt mir eine Routine in PHP geschrieben, die aus dem gesamten Accept etwas zusammenstellt und einem Status 406 entgegenwirkt (HTTP/1.1).
Für Deinen Fall wäre die praktische Grundlage daraus auf index.htm.htm zu verzichten und mit einem ErrorDocument 406 zu arbeiten, was solche exzentrischen Accept-Language-Werte parst.
Gruß aus Berlin!
eddi
Hallo alfie,
keine schöne aber mögliche Lösung wäre es, Du hältst für jede Unterversion eine eigene Seite bereit, also index.htm.de-de, index.htm.de-at etc. (wenn Du die Möglichkeit hast, dann reicht ja ein symbolischer Link auf index.htm.de). Und dazu dann die entsprechenden AddLanguage-Direktiven:
AddLanguage de-de .de-de
AddLanguage de-at .de-at
etc.
Viele Grüße
Carsten
Hallo Carsten!
keine schöne aber mögliche Lösung wäre es, Du hältst für jede Unterversion eine eigene Seite bereit, also index.htm.de-de, index.htm.de-at etc. (wenn Du die Möglichkeit hast, dann reicht ja ein symbolischer Link auf index.htm.de). Und dazu dann die entsprechenden AddLanguage-Direktiven:
AddLanguage de-de .de-de
AddLanguage de-at .de-at
etc.
Ja theoretisch, aber schon jetzt gibt's eine Verdreifachung der Seiten. Symbolische Links kann ich leider nicht setzen. Nochmal vielen Dank, ich muss halt irgendwie damit leben ;-)
mfg Alfie
Hallo alfie,
nächste Möglichkeit: Du verwendest Type-Maps.
< http://httpd.apache.org/docs-2.0/content-negotiation.html.en#negotiation>
Hier kannst Du unter "Content-language" so viele Sprachen angeben, wie Du lustig bist. Für Dich würde das also etwa so aussehen (Dateiname index.htm.var):
URI: index.htm
URI: index.htm.en
Content-type: text/html
Content-language: en, en-us, en-gb, [...]
URI: index.htm.de
Content-type: text/html
Content-language: de, de-de, de-at, de-ch, de-lu, de-be, de-it, de-na, [...]
URI: index.htm.htm
Content-type: text/html
Beachte das Fehlen von "Content-language" bei der "Standard"-Seite.
Viele Grüße
Carsten
Hallo Carsten!
nächste Möglichkeit: Du verwendest Type-Maps.
http://httpd.apache.org/docs-2.0/content-negotiation.html.en#negotiation
Das klingt gut! Jetzt muss ich mich einmal ein bisschen einlesen ;-)
mfg Alfie
Hallo Carsten!
nächste Möglichkeit: Du verwendest Type-Maps.
http://httpd.apache.org/docs-2.0/content-negotiation.html.en#negotiation
Was läuft hier falsch:
http://langtest.maloer.org/index.htm.var
Wenn ich meinen Browser mit der *einzigen* Sprache [de-li] konfiguriere, wird der englische Default index.htm.htm ausgeliefert, obwohl [de-li] auf [de] gemapped ist...
mfg Alfie
Hallo alfie,
Was läuft hier falsch:
http://langtest.maloer.org/index.htm.varWenn ich meinen Browser mit der *einzigen* Sprache [de-li] konfiguriere, wird der englische Default index.htm.htm ausgeliefert, obwohl [de-li] auf [de] gemapped ist...
Mir scheint, Du warst ein wenig sparsam mit dem Setzen der Zeilenumbrüche und Leerzeilen.
Strukturiere Deine Type-Map mal exakt so, wie sie in den Beispielen angegeben ist.
Viele Grüße
Carsten
Hallo Carsten!
Mir scheint, Du warst ein wenig sparsam mit dem Setzen der Zeilenumbrüche und Leerzeilen.
Strukturiere Deine Type-Map mal exakt so, wie sie in den Beispielen angegeben ist.
Das sieht nur so aus, wenn man das File über den Bbrowser aufruft.
im Original:
URI: index.htm
URI: index.htm.en
Content-type: text/html
Content-language: en, en-us, en-gb, en-ca, en-au, en-ie, en-nz, en-za
URI: index.htm.de
Content-type: text/html
Content-language: de, de-de, de-at, de-ch, de-lu, de-be, de-it, de-li
URI: index.htm.htm
Content-type: text/html
mfg Alfie
Hallo Alfie,
könnte es sein, daß Du das
AddHandler type-map .var
in einer .htaccess-Datei vergessen hast, bzw. keine Berechtigung hast, einen Handler zu setzen?
Viele Grüße
Carsten
Hallo Carsten!
könnte es sein, daß Du das
AddHandler type-map .var
in einer .htaccess-Datei vergessen hast
Richtig vermutet! Jetzt funktioniert's, vielen Dank!
mfg Alfie
Hallo!
Genauer: mit der einzig vorhandenen Sprache im [de-li] im Moz wird die deutsche Variante ausgeliefert, dann kommt ein Moz-Info mit folgendem Text (kein Scherz!):
"Um die Zeichen dieser Sprache richtig anzeigen zu können, müssen Sie die folgenden Komponenten installieren:
Vereinfache Chinesische Textanzeige
Verwenden Sie 'regionale Optionen' in der Systemsteuerung, um diese Komponenten zu installieren."
mfg Alfie
Hallo Alfie,
Genauer: mit der einzig vorhandenen Sprache im [de-li] im Moz wird die deutsche Variante ausgeliefert, dann kommt ein Moz-Info mit folgendem Text (kein Scherz!):
[...]
Falls es Dich beruhigt: Wenn ich Deine Seite mit dieser Einstellung aufrufe, kommt diese Meldung nicht...
Viele Grüße
Carsten
Hallo Carsten!
Falls es Dich beruhigt: Wenn ich Deine Seite mit dieser Einstellung aufrufe, kommt diese Meldung nicht...
Ja, beruhigt mich in der Tat. War im Moz nicht reproduzierbar (vielleicht in Cache-Problem), im IE6 auch alles paletti ;-)
mfg Alfie
Hallo,
Eine unbekannter Language-Request müsste aber index.htm.htm und nicht index.htm.en liefern?
Du sagst dem Apachen aber, daß Du neben der ihm unbekannten Sprache de-at auch en akzeptierst:
[ 31] Accept-Language: de-at,en;q=0.5
Daher wird die englische Version ausgeliefert.
Viele Grüße
Carsten