Obtener el subdominio de una URL
Obtener el subdominio desde una URL parece fácil al principio.
http://www.domain.example
Escanee el primer período y luego devuelva lo que vino después de "http://"...
Entonces recuerdas
http://super.duper.domain.example
Oh. Entonces piensas, está bien, busca el último punto, retrocede una palabra y obtén todo lo anterior.
Entonces recuerdas
http://super.duper.domain.co.uk
Y vuelves al punto de partida. ¿Alguien tiene alguna buena idea además de almacenar una lista de todos los TLD?
¿Alguien tiene alguna buena idea además de almacenar una lista de todos los TLD?
No, porque cada TLD difiere en lo que se considera subdominio, dominio de segundo nivel, etc.
Tenga en cuenta que existen dominios de primer nivel, dominios de segundo nivel y subdominios. Técnicamente hablando, todo excepto el TLD es un subdominio.
En el ejemplo de dominio.com.uk, "dominio" es un subdominio, "com" es un dominio de segundo nivel y "uk" es el TLD.
Por lo tanto, la cuestión sigue siendo más compleja de lo que parece a primera vista y depende de cómo se gestiona cada TLD. Necesitará una base de datos de todos los TLD que incluyan su partición particular y lo que cuenta como dominio de segundo nivel y subdominio. Sin embargo, no hay demasiados TLD, por lo que la lista es razonablemente manejable, pero recopilar toda esa información no es trivial. Es posible que ya exista una lista de este tipo disponible.
Parece que http://publicsuffix.org/ es una de esas listas: todos los sufijos comunes (.com, .co.uk, etc.) en una lista adecuada para realizar búsquedas. Aún así no será fácil analizarlo, pero al menos no es necesario mantener la lista.
Un "sufijo público" es aquel bajo el cual los usuarios de Internet pueden registrar nombres directamente. Algunos ejemplos de sufijos públicos son ".com", ".co.uk" y "pvt.k12.wy.us". La Lista pública de sufijos es una lista de todos los sufijos públicos conocidos.
La Lista Pública de Sufijos es una iniciativa de la Fundación Mozilla. Está disponible para su uso en cualquier software, pero se creó originalmente para satisfacer las necesidades de los fabricantes de navegadores. Permite a los navegadores, por ejemplo:
- Evite que se establezcan "supercookies" que dañan la privacidad para sufijos de nombres de dominio de alto nivel
- Resalte la parte más importante de un nombre de dominio en la interfaz de usuario
- Ordene con precisión las entradas del historial por sitio
Al revisar la lista , puede ver que no es un problema trivial. Creo que una lista es la única forma correcta de lograr esto...
Como dice Adam, no es fácil y actualmente la única forma práctica es utilizar una lista.
Incluso entonces, hay excepciones; por ejemplo, .uk
hay un puñado de dominios que son válidos inmediatamente en ese nivel y que no están en .co.uk
, por lo que deben agregarse como excepciones.
Actualmente, así es como lo hacen los navegadores convencionales: es necesario asegurarse de que example.co.uk
no se pueda configurar una cookie .co.uk
que luego se enviará a cualquier otro sitio web en .co.uk
.
La buena noticia es que ya hay una lista disponible en http://publicsuffix.org/ .
También hay trabajo en el IETF para crear algún tipo de estándar que permita a los TLD declarar cómo se ve su estructura de dominio. Sin embargo, esto es un poco complicado por programas como .uk.com
, que se opera como si fuera un sufijo público, pero el .com
registro no lo vende.
Publicsuffix.org parece la manera de hacerlo. Existen muchas implementaciones para analizar fácilmente el contenido del archivo de datos publicsuffix:
- Perl: Dominio::PublicSuffix
- Java: http://sourceforge.net/projects/publicsuffix/
- PHP: analizador de dominio php
- C#/.NET: https://github.com/danesparza/domainname-parser
- Python: http://pypi.python.org/pypi/publicsuffix
- Ruby: matriz de dominio , sufijo_público