XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Spracherkennung mit 301 oder 302 (http://xhtmlforum.de/showthread.php?t=58660)

heiko_rs 01.10.2009 12:26

Spracherkennung mit 301 oder 302
 
Hallo allerseits,

bei einer mehrsprachigen Website lasse ich beim Aufruf von domain.tld per $_SERVER['HTTP_ACCEPT_LANGUAGE'] die bevorzugte Sprache des Nutzers ermitteln und dann entsprechend weiterleiten, z.B. auf domain.tld/de/ oder domain.tld/en/ (selbstverständlich gibt es auf jeder einzelnen Seite die Möglichkeit, die Sprache "manuell" zu wechseln).

Nun überlege ich allerdings, ob ich als Statuscode 301 oder 302 senden soll, denn ideal ist beides nicht - 301 ist nicht wirklich zutreffend und 302 nicht optimal für Google (da möglicher Duplicate Content). Was würdet Ihr tun?

Schöne Grüße,
Heiko

Gumbo 01.10.2009 12:48

Ich sehe kein Problem einer permanenten Weiterleitung, wenn du diese an die Bedingung bei der Sprachvereinbarung knüpfst:
Code:

HTTP/1.1 301 Moved Permanently
Location: http://example.com/en/
Vary: Accept-Language

Das gilt natürlich nur dann, wenn die Sprachvereinbarung erfolgreich war.

mantiz 01.10.2009 12:50

Ich hab' bisher nur deutsche Seiten gemacht, aber was würdest Du vom 300er halten?

Dieser steht ja für MultipleChoice und im Prinzip ist es das ja. Im Location-Header kann man die bevorzugte Resource angeben, sollte also auch vom Client entsprechend umgeleitet werden, probiert habe ich es allerdings nicht.

inta 01.10.2009 20:48

Ich würde auch den 300er verwenden. Die Seite wurde nicht verschoben, schon gar nicht temporär.

heiko_rs 02.10.2009 00:39

300 verstehe ich allerdings eher als "keine eindeutige Antwort möglich, daher mehrere Optionen zur Auswahl". Aber wenn ein Browser eine Anfrage mit Deutsch als bevorzugter Sprache sendet, und der Server kann ihm eine deutsche Seite geben und leitet auch direkt dorthin weiter, sehe ich das schon als klare Antwort (und demzufolge ohne "Multiple Choices").

mantiz 02.10.2009 01:08

Ich sehe das so, dass der Browser eine englische Seite anfordert, er aber eigentlich deutsch bevorzugt.
Der Server teilt dem Browser dann erstmal mit, dass es unter der angeforderten Resource mehrere (Sprach-)Versionen gibt und die (vom Browser) bevorzugte Version im Location-Header angegeben ist, der Browser leitet entsprechend um.

Ist bereits die bevorzugte (Sprach-)Version angefordert worden, gibt's natürlich einen 200er, wobei die bevorzugte (Sprach-)Version auch eine manuell eingestellte Version sein kann.

Also Browser sendet deutsch, Benutzer hat manuell englisch eingestellt, dann sollte die englische Version mit einem 200er ausgeliefert werden und die deutsche mit einem 300er.

Naja, sind meine ersten Gedanken dazu, aber das scheint für mich (momentan) schlüssig.

Zitat:

Zitat von heiko_rs (Beitrag 446739)
300 verstehe ich allerdings eher als "keine eindeutige Antwort möglich, daher mehrere Optionen zur Auswahl". ...

Wenn als bevorzugte Sprache vom Client ein "englisch" kommt und dieser die deutsche Version requestet, kann die Antwort ja eigentlich nicht eindeutig sein, da der Server ja beide Versionen hat und nicht wissen kann, ob die englische Version tatsächlich gewünscht ist, daher der Status, dass es mehrere Versionen gibt, "er aber vermutet, dass der Client die deutsche Version haben will und ihm somit die Adresse dieser Version im Header mitteilt".

heiko_rs 02.10.2009 02:13

Zitat:

Zitat von mantiz (Beitrag 446740)
Wenn als bevorzugte Sprache vom Client ein "englisch" kommt und dieser die deutsche Version requestet

Möglicherweise liegt ein Missverständnis vor: Wenn per URL explizit eine bestimmte Sprache angefragt wird (z.B. domain.tld/en/biography), lasse ich die entsprechende Version auch ausliefern. Denn wenn z.B. jemand eine spezielle englische Formulierung gegoogelt hat, soll er das angeklickte Suchergebnis auch bekommen, und nicht etwa dessen deutsche Übersetzung, nur weil sein Browser Deutsch als bevorzugte Sprache sendet.

Die Abfrage findet also nur statt, wenn domain.tld angefragt wird, und evtl. zusätzlich noch bei ungültigen Anfragen (ggf. auch nur bei fehlender "Sprachkomponente" in der URL), damit eine Fehlermeldung in der passenden Sprache ausgeliefert werden kann. Und fragt ein Browser domain.tld an, mit Deutsch als bevorzugter Sprache, ist die Weiterleitung an die deutsche Version der Seite auch eine eindeutige Antwort und daher imho kein wirklicher 300.

Gumbo 02.10.2009 09:00

Zitat:

Zitat von heiko_rs (Beitrag 446739)
300 verstehe ich allerdings eher als "keine eindeutige Antwort möglich, daher mehrere Optionen zur Auswahl".

Das ist richtig. Der 300-Statuscode ist für den Fall einer fehlgeschlagenen Inhaltsvereinbarung gedacht, wenn also keine eindeutige Wahl getroffen werden konnte.

inta 02.10.2009 10:16

Zitat:

Zitat von Gumbo (Beitrag 446751)
Das ist richtig. Der 300-Statuscode ist für den Fall einer fehlgeschlagenen Inhaltsvereinbarung gedacht, wenn also keine eindeutige Wahl getroffen werden konnte.

Genau das ist meiner Meinung nach bei einer Seite die in verschiedenen Sprachen vorliegt der Fall. Ob nun eine Grafik als jpg und png vorliegt und deswegen keine eindeutige Antwort erfolgen kann, oder die Seite einmal in deutsch und englisch vorliegt, ist für mich die gleiche Problematik. Der Request-Header gibt nur einen Hinweis welche Sprache man am besten wählt, daraus kann aber keine eindeutige Antwort abgeleitet werden.

Gumbo 02.10.2009 10:22

Zitat:

Zitat von inta (Beitrag 446758)
Der Request-Header gibt nur einen Hinweis welche Sprache man am besten wählt, daraus kann aber keine eindeutige Antwort abgeleitet werden.

Nur wenn überhaupt keine Übereinstimmung gefunden wird, gilt eine Inhaltsvereinbarung als fehlgeschlagen. Etwa wenn ein Dokument nur in Englisch verfügbar ist, der Client aber nur Deutsch akzeptiert. Wenn er allerdings Deutsch und Englisch akzeptiert, ist die Sprachvereinbarung erfolgreich, selbst wenn Deutsch vor Englisch bevorzugt wird. Und das gilt auch nur für generische URLs.


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:08 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2021, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2020