Erste Dinge zuerst:
Ich speichere mehrere Domains in einer Datenbank, nachdem ich jeden Domain-Namen in seine IDNA-Version konvertiert habe. Was ich wissen muss, wie lang ein solcher IDNA-konvertierter Domainname maximal sein darf, kann ich die maximale Länge des Datenbankfeldes definieren.
Bekannte Tatsache:
Nun weiß ich, dass die maximale Anzahl von Zeichen in einem Domain-Namen (einschließlich Subdomains) 255 Zeichen beträgt.
Wo ich es verloren habe:
Das ist auf den ersten Blick einfach, aber ... bedeutet das normale Ascii-Zeichen von internationalen Charakteren (denke UTF-8-Codierung)?
Um Ihnen ein Beispiel zu geben: Die Domain "müller.de" hat 9 Zeichen, wenn ich ignoriere, dass "ü" ein internationales Zeichen ist, das mehr Bytes benötigt, um dargestellt zu werden. Die IDNA-Version von "müller.de" ist "xn--mller-kva.de", die 16 Zeichen hat. Dies zeigt, dass es definitiv einen Unterschied in der maximalen Länge gibt, abhängig davon, ob "if" IDNA konvertiert wird oder nicht.
Abhängig von der Art der Zeichen, die sie bedeuten, kann das maximal 255 Zeichen die internationale Charakterversion, die IDNA-konvertierte Version oder sogar beides sein.
Und das ist, wo ich es ein bisschen verloren habe ... vor allem, da ich berücksichtigen muss, dass nicht alle Domains vernünftig sind und Zeug wie "öüßüöäéèê.example.äöüßüöäéèê-äöüßüöäééêê.test.äöüßüöäéèê.com " und noch schlimmer ist zu erwarten.
Also, "raten" und "auf das Beste hoffen" ist keine Option. Ich muss es genau wissen ...
Die Frage ist:
Basierend auf der bekannten Tatsache, dass die maximale Anzahl an Zeichen in einem Domänennamen (einschließlich Subdomänen) 255 Zeichen beträgt ... Wie groß ist die maximale Länge eines IDNA-konvertierten Domänennamens?
Oder meinten sie, dass die konvertierte IDNA-Version (punycode) ebenfalls auf 255 Zeichen beschränkt ist (was bedeuten würde, dass Domänen mit internationalen / Unicode-Zeichen in ihrer Unicode-Darstellung tatsächlich kürzere Begrenzungen hätten, weil ihre IDNA-konvertierte Version respektieren müsste die 255 Zeichen Grenze)?
Nach meinem Verständnis ist die Begrenzung auf 255 Zeichen nach der IDNA-Konvertierung .
Dies liegt daran, dass DNS-Einträge diese Zeichenbeschränkung haben und DNS-Einträge im Allgemeinen nur Buchstaben, Ziffern und Bindestriche ( aus Wikipedia <) enthalten können / a>). Der DNS-Server verwendet daher die Punycode-Version des IDN für seinen Datensatz, nicht die Unicode-Version.
OK, ich glaube, ich habe es selbst herausgefunden und dieser Ausschnitt, den ich gefunden habe (indem ich im Internet suchte), half:
Es gab im Wesentlichen zwei verschiedene Möglichkeiten, um internationalisierte Domainnamen (IDN) einzuführen. Die erste bestand darin, Anpassungen am Domain Name System (DNS) vorzunehmen, wodurch Unicode-Zeichen direkt verwendet werden könnten. Es wurde angenommen, dass dies eine zu drastische Maßnahme war, und daher wurde die zweite Option gewählt. Dies beinhaltete das Kompilieren eines Algorithmus, um anzugeben, wie eine Unicode-Zeichenfolge in einen zulässigen ASCII-Domänennamen umgewandelt werden sollte. Diese ACE-Zeichenfolge (ACE steht für ASCII Compatible Encoding) wird dann in das DNS eingegeben. Mit der Einführung von IDN ist der Eintrag im DNS zum ersten Mal nicht mehr identisch mit dem Domain-Namen.
- Quelle
Die Antwort lautet, dass die zu beachtende Länge die 255-Zeichen-Grenze ist, da DNS dies erwartet.
Mein Verdacht war richtig. Der Domänenname und der Eintrag im DNS sind zwei verschiedene Dinge mit IDN. Es zählt die maximale Länge des DNS-Eintrags.
Der Domainname "müller.de" hat 9 Zeichen, die entsprechende ACE (ASCII Compatible Encoding) Zeichenkette "xn--mller-kva.de" hat jedoch 16 Zeichen.
Es ist die ACE-Zeichenfolge, die von DNS verwendet wird, und die ACE-Zeichenfolge fällt unter die 255-Zeichengrenze. Dies bedeutet, dass das maximale Limit der Unicode-Version (Domänenversion) durch die Anzahl der verwendeten Unicode-Zeichen definiert ist und wenn die Zeichenfolge nach der IDNA-Konvertierung immer noch innerhalb der 255-Zeichen-Grenze liegt.
Meine Güte, die Spezifikationen hätten bei solchen Dingen vielleicht etwas klarer sein können. Zumal seit etwa dem 1. März 2004 internationale Domainnamen existieren. Aber ich habe die Antwort gefunden, und darauf kommt es an.
Vielleicht kann das jemandem helfen, der dieselbe Frage hat.
Die einfache Antwort für meine Datenbankfeldlänge ist 255 CHARs.
Die Tatsache, dass ich die Domänennamen in ihrer IDNA-konvertierten (punycode / ACE string) Version speichere, bestätigt nur diese maximale Zeichenanzahl.
RFC3492 sagt dies über eines der Features der IDNA-Kodierung:
Effiziente Codierung: Das Verhältnis von Grundlänge zu Länge Saitenlänge ist klein. Dies ist wichtig im Zusammenhang mit Domänennamen, weil RFC1034 die Länge von a einschränkt Domain-Label auf 63 Zeichen.
Das ist es. 63 Zeichen ist eine maximale Länge für jeden Domain-Namen unabhängig davon, ob es in IDNA oder in ASCII ist.
Tags und Links dns database-design maxlength idn punycode