Comment extraire le protocole, le domaine et le port d'une URL ?

Publié 27 août 2024

Problème : Analyser les composants d'une URL

Lorsque l'on travaille avec des URL en programmation, il est souvent nécessaire de les décomposer. Extraire le protocole, le domaine et le port d'une URL est une tâche courante pour les développeurs. Ce processus permet de mieux gérer les adresses web, d'améliorer les contrôles de sécurité et de rendre la communication réseau plus efficace. Cependant, l'analyse manuelle de ces éléments peut entraîner des erreurs et prendre beaucoup de temps, surtout lorsqu'il s'agit de différents formats d'URL.

Comprendre les composants d'une URL

Une URL (Uniform Resource Locator) est une adresse qui pointe vers une ressource sur internet. Elle comporte plusieurs parties, dont le protocole, le nom de domaine et parfois un numéro de port. Ces parties fonctionnent ensemble pour localiser les ressources web.

Le protocole définit la manière dont les données sont transférées entre le client et le serveur. Les protocoles courants sont HTTP (Hypertext Transfer Protocol) et HTTPS (HTTP Secure). Le nom de domaine est l'adresse d'un site web, comme "example.com". Le numéro de port, lorsqu'il est inclus, indique quel port du serveur utiliser pour la communication.

L'extraction de ces parties d'une URL est utile pour :

  1. La sécurité : Vérifier si une connexion est sécurisée (HTTPS) ou non (HTTP).

  2. Le routage : Utiliser le nom de domaine pour diriger les requêtes vers le bon serveur.

  3. Le dépannage : Utiliser le numéro de port pour identifier les problèmes de connexion.

  4. Le traitement des données : Diviser les parties de l'URL pour manipuler plus facilement les adresses web.

  5. Les intégrations API : Utiliser des parties spécifiques de l'URL pour l'authentification et la récupération de données à partir de services web.

Extraire le protocole d'une URL

Le protocole fait partie d'une URL et indique comment les données sont transférées entre le client et le serveur. JavaScript offre des moyens d'obtenir cette information à partir d'une URL.

Utiliser JavaScript pour obtenir le protocole

Pour extraire le protocole d'une URL en JavaScript, vous pouvez utiliser l'objet URL :

function getProtocol(url) {
  const urlObject = new URL(url);
  return urlObject.protocol;
}

Cette fonction crée un objet URL à partir de la chaîne URL donnée et renvoie le protocole. Le protocole inclut le deux-points à la fin, comme "http:" ou "https:".

Pour une approche plus basique, vous pouvez utiliser la manipulation de chaînes :

function getProtocolSimple(url) {
  return url.split(':')[0];
}

Cette méthode divise l'URL au premier deux-points et prend la première partie, qui est le protocole.

Lors de la gestion de différents types de protocoles, gardez à l'esprit :

  • HTTP et HTTPS sont courants pour les URL web.
  • D'autres protocoles incluent FTP, mailto et file.
  • Certaines URL peuvent ne pas avoir de protocole (URL relatives au protocole).

Pour gérer différents cas :

function getProtocolSafe(url) {
  if (url.startsWith('//')) {
    return 'https'; // Supposer HTTPS pour les URL relatives au protocole
  }
  const match = url.match(/^([a-z]+):/i);
  return match ? match[1].toLowerCase() : null;
}

Cette fonction vérifie les URL relatives au protocole, utilise une expression régulière pour trouver le protocole et le renvoie en minuscules. Si aucun protocole n'est trouvé, elle renvoie null.

Extraire le nom de domaine d'une URL

Le nom de domaine fait partie d'une URL et identifie le site web. Son extraction est utile pour de nombreuses tâches web. JavaScript offre des moyens d'obtenir le nom de domaine à partir d'une URL.

Techniques JavaScript pour l'extraction du domaine

Utilisation de l'objet URL

L'objet URL en JavaScript aide à extraire le nom de domaine :

function getDomain(url) {
  const urlObject = new URL(url);
  return urlObject.hostname;
}

Cette fonction crée un objet URL et renvoie sa propriété hostname. Par exemple :

const url = 'https://www.example.com:8080/path?query=value';
console.log(getDomain(url)); // Sortie : www.example.com

Cette méthode fonctionne avec les URL qui ont des sous-domaines ou des adresses IP.

Expression régulière pour l'extraction du domaine

Pour plus de contrôle ou lorsque l'objet URL n'est pas disponible, vous pouvez utiliser une expression régulière :

function getDomainRegex(url) {
  const match = url.match(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/im);
  return match ? match[1] : null;
}

Cette fonction basée sur une regex :

  • Fonctionne avec ou sans le protocole
  • Gère les URL avec ou sans 'www'
  • Extrait le nom de domaine jusqu'au premier slash, deux-points ou point d'interrogation

Exemple d'utilisation :

const url1 = 'https://subdomain.example.com/path';
const url2 = 'http://www.test-site.co.uk:8080/path';

console.log(getDomainRegex(url1)); // Sortie : subdomain.example.com
console.log(getDomainRegex(url2)); // Sortie : test-site.co.uk

Les deux méthodes extraient les noms de domaine des URL en JavaScript. La méthode utilisant l'objet URL est simple et fonctionne dans la plupart des cas, tandis que l'approche regex offre plus de flexibilité pour les structures d'URL complexes.

Extraire le numéro de port d'une URL

Le numéro de port dans une URL spécifie le point de terminaison pour la communication sur le serveur. C'est une partie importante des connexions réseau. Voici des méthodes pour obtenir les informations de port à partir des URL.

Méthodes pour obtenir les informations de port

Pour extraire le numéro de port d'une URL, vous pouvez utiliser l'objet URL de JavaScript :

function getPort(url) {
  const urlObject = new URL(url);
  return urlObject.port || null;
}

Cette fonction renvoie le port s'il est présent dans l'URL, ou null s'il ne l'est pas.

Pour les URL sans port, vous pouvez obtenir le port par défaut en fonction du protocole :

function getPortWithDefault(url) {
  const urlObject = new URL(url);
  if (urlObject.port) {
    return urlObject.port;
  }
  switch (urlObject.protocol) {
    case 'http:':
      return '80';
    case 'https:':
      return '443';
    case 'ftp:':
      return '21';
    default:
      return null;
  }
}

Cette fonction renvoie le port s'il est présent, ou le port par défaut pour les protocoles courants.

Numéros de port par défaut pour les protocoles courants :

  • HTTP : 80
  • HTTPS : 443
  • FTP : 21
  • SFTP : 22
  • SMTP : 25
  • POP3 : 110

Pour les URL avec des ports, l'extraction du port est simple :

const url1 = 'https://example.com:8080/path';
console.log(getPort(url1)); // Sortie : 8080

const url2 = 'http://localhost:3000';
console.log(getPort(url2)); // Sortie : 3000

Lors de la gestion d'URL sans ports :

const url3 = 'https://example.com/path';
console.log(getPortWithDefault(url3)); // Sortie : 443

const url4 = 'http://example.org';
console.log(getPortWithDefault(url4)); // Sortie : 80

Ces méthodes vous permettent d'extraire les informations de port des URL, que le port soit explicitement indiqué ou implicite par le protocole.