Come estrarre protocollo, dominio e porta da un URL?

Pubblicato 27 agosto 2024

Problema: Analizzare i Componenti dell'URL

Quando si lavora con gli URL nella programmazione, spesso è necessario suddividerli nelle loro parti. Ottenere il protocollo, il dominio e la porta da un URL è un'attività comune per gli sviluppatori. Questo processo aiuta a gestire meglio gli indirizzi web, migliora i controlli di sicurezza e rende più efficiente la comunicazione di rete. Tuttavia, analizzare manualmente questi elementi può portare a errori e richiedere molto tempo, soprattutto quando si ha a che fare con diversi formati di URL.

Comprendere i Componenti dell'URL

Un URL (Uniform Resource Locator) è un indirizzo che punta a una risorsa su internet. È composto da parti, tra cui il protocollo, il nome di dominio e talvolta un numero di porta. Queste parti lavorano insieme per localizzare le risorse web.

Il protocollo stabilisce come i dati si muovono tra il client e il server. I protocolli comuni sono HTTP (Hypertext Transfer Protocol) e HTTPS (HTTP Secure). Il nome di dominio è l'indirizzo di un sito web, come "example.com". Il numero di porta, quando incluso, indica quale porta sul server utilizzare per la comunicazione.

Estrarre queste parti da un URL è utile per:

  1. Sicurezza: Verificare il protocollo per vedere se una connessione è sicura (HTTPS) o meno (HTTP).

  2. Routing: Utilizzare il nome di dominio per inviare richieste al server corretto.

  3. Risoluzione dei problemi: Utilizzare il numero di porta per identificare problemi di connessione.

  4. Elaborazione dei dati: Suddividere le parti dell'URL per lavorare più facilmente con gli indirizzi web.

  5. Integrazioni API: Utilizzare parti specifiche dell'URL per l'accesso e il recupero di dati dai servizi web.

Estrarre il Protocollo dall'URL

Il protocollo è parte di un URL, indicando come i dati si muovono tra il client e il server. JavaScript offre modi per ottenere questa informazione da un URL.

Usare JavaScript per Ottenere il Protocollo

Per estrarre il protocollo da un URL in JavaScript, puoi utilizzare l'oggetto URL:

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

Questa funzione crea un oggetto URL dalla stringa URL fornita e restituisce il protocollo. Il protocollo include i due punti alla fine, come "http:" o "https:".

Per un approccio base, puoi usare la manipolazione delle stringhe:

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

Questo metodo divide l'URL al primo due punti e prende la prima parte, che è il protocollo.

Quando si gestiscono diversi tipi di protocollo, ricorda:

  • HTTP e HTTPS sono comuni per gli URL web.
  • Altri protocolli includono FTP, mailto e file.
  • Alcuni URL potrebbero non avere un protocollo (URL protocol-relative).

Per gestire vari casi:

function getProtocolSafe(url) {
  if (url.startsWith('//')) {
    return 'https'; // Assume HTTPS per URL protocol-relative
  }
  const match = url.match(/^([a-z]+):/i);
  return match ? match[1].toLowerCase() : null;
}

Questa funzione controlla gli URL protocol-relative, usa un'espressione regolare per trovare il protocollo e lo restituisce in minuscolo. Se non viene trovato alcun protocollo, restituisce null.

Estrarre il Nome di Dominio dall'URL

Il nome di dominio è parte di un URL, identificando il sito web. Estrarlo è utile per molte attività web. JavaScript offre modi per ottenere il nome di dominio da un URL.

Tecniche JavaScript per l'Estrazione del Dominio

Uso dell'oggetto URL

L'oggetto URL in JavaScript aiuta a estrarre il nome di dominio:

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

Questa funzione crea un oggetto URL e restituisce la sua proprietà hostname. Per esempio:

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

Questo metodo funziona con URL che hanno sottodomini o indirizzi IP.

Espressione regolare per l'estrazione del dominio

Per un maggiore controllo o quando l'oggetto URL non è disponibile, puoi usare un'espressione regolare:

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

Questa funzione basata su regex:

  • Funziona con o senza il protocollo
  • Gestisce URL con o senza 'www'
  • Estrae il nome di dominio fino alla prima barra, due punti o punto interrogativo

Esempio di utilizzo:

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

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

Entrambi i metodi estraggono i nomi di dominio dagli URL in JavaScript. Il metodo dell'oggetto URL è semplice e funziona per la maggior parte dei casi, mentre l'approccio regex offre maggiore flessibilità per strutture URL complesse.

Estrarre il Numero di Porta dall'URL

Il numero di porta in un URL specifica l'endpoint per la comunicazione sul server. È una parte importante delle connessioni di rete. Ecco alcuni metodi per ottenere informazioni sulla porta dagli URL.

Metodi per Ottenere Informazioni sulla Porta

Per estrarre il numero di porta da un URL, puoi utilizzare l'oggetto URL di JavaScript:

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

Questa funzione restituisce la porta se è presente nell'URL, o null se non lo è.

Per gli URL senza una porta, puoi ottenere la porta predefinita basata sul protocollo:

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;
  }
}

Questa funzione restituisce la porta se presente, o la porta predefinita per i protocolli comuni.

Numeri di porta predefiniti per protocolli comuni:

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

Per gli URL con porte, la porta è facile da estrarre:

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

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

Quando si gestiscono URL senza porte:

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

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

Questi metodi ti permettono di estrarre informazioni sulla porta dagli URL, sia che la porta sia dichiarata esplicitamente o implicita dal protocollo.