Risolvere un URL relativo con un URL base
Trasformi un link, un percorso, una query, un frammento o un riferimento relativo al protocollo nell’esatto URL assoluto che userebbe un browser.
Esegui gratis nel browser
Inserisca un URL base assoluto e il riferimento trovato in un documento, feed, foglio di stile, manifesto o risposta API. Il risolutore applica le regole standard a segmenti, barre finali, query, frammenti, porte e cambi di origine, restituendo un URL normalizzato senza richiedere la destinazione né esaminare contenuti remoti. Il calcolo è rapido e deterministico.
Parta dall’URL completo che fornisce il contesto
Un riferimento relativo ha significato soltanto rispetto a un altro URL. Inserisca tale contesto in base_url come URL assoluto completo, includendo schema e host quando lo schema prevede un host. Il percorso conta quanto il dominio. Per esempio, una base che termina con <code>/docs/page.html</code> considera un riferimento semplice come <code>image.png</code> un elemento allo stesso livello della pagina, mentre una base che termina con <code>/docs/</code> lo considera figlio di quella directory. Il risolutore non tenta di indovinare se il percorso rappresenti un file o una cartella: segue la sintassi, soprattutto la barra finale. Accetta le forme assolute standard riconosciute dall’implementazione URL del browser. Un valore come <code>/docs/page.html</code> non è una base sufficiente, perché manca dello schema assoluto e del contesto di origine. Le basi non valide o relative generano un errore di input, anziché una risposta soltanto plausibile. Questo rigore rende visibili gli errori prima che i link risolti entrino in un crawler, un’importazione, una regola di reindirizzamento o un archivio dati.
Comprenda come ogni tipo di riferimento modifica la base
Il campo relative_reference può contenere molto più di un nome file. Una barra iniziale sostituisce il percorso base mantenendo schema e autorità. Due barre iniziali creano un riferimento di rete, consentendo di cambiare host ed ereditare lo schema. I segmenti come <code>../</code> risalgono di livello e <code>./</code> restano al livello corrente; la normalizzazione elimina tali segmenti di navigazione dall’URL finale. Un riferimento che inizia con <code>?</code> conserva il percorso e sostituisce la query. Uno che inizia con <code>#</code> conserva percorso e query, cambiando il frammento. Un riferimento assoluto sostituisce interamente la base, come stabilisce lo standard. Questa capacità rifiuta i riferimenti vuoti, affinché un campo accidentalmente mancante non venga scambiato per un riutilizzo intenzionale della base. I caratteri codificati in percentuale rimangono codificati secondo le regole di serializzazione; host, porte predefinite e altri componenti possono invece essere normalizzati nella forma canonica prodotta dal parser standard.
Usi il risultato serializzato senza avviare richieste di rete
Il risultato contiene absolute_url, ossia l’URL normalizzato e serializzato dopo la risoluzione. Non vengono eseguiti interrogazioni DNS, richieste HTTP, download, controlli di disponibilità o verifiche dei reindirizzamenti. Questa separazione è utile quando serve una trasformazione deterministica e non un test del sito in tempo reale: gli stessi due input producono sempre lo stesso output, anche se l’host non esiste o la risorsa è privata. Usi il risultato per normalizzare link estratti da HTML, preparare code di scansione, espandere riferimenti nei feed, convalidare fixture, costruire voci di sitemap o confrontare URL in modo coerente prima della deduplicazione. La risoluzione sintattica non dimostra che la destinazione sia sicura, raggiungibile, pubblica o autorizzata. Se i valori provengono da utenti non attendibili, applichi le politiche della Sua applicazione su schemi, host e accesso alla rete prima di recuperare l’URL restituito. L’API e lo strumento nel browser condividono lo stesso algoritmo puro. Ogni richiesta API costa $0.002; l’esecuzione locale in questa pagina è gratuita.
Casi d'uso
Espandere i link estratti da una pagina
Converta i valori relativi di href e src in URL assoluti usando l’URL del documento di origine.
Normalizzare una coda di scansione
Risolva segmenti punto, percorsi dalla radice, query e frammenti prima della scansione o deduplicazione.
Testare routing e fixture URL
Generi URL attesi deterministici per i test senza contattare host né dipendere dallo stato della rete.
Domande frequenti
Che cosa cambia una barra finale nell’URL base?
Stabilisce se l’ultimo segmento è trattato come directory. Senza barra, un percorso relativo semplice sostituisce quel segmento; con la barra, viene aggiunto nella directory.
Il riferimento relativo può essere un URL assoluto?
Sì. La risoluzione standard restituisce tale URL assoluto indipendentemente dalla base, applicando la normale serializzazione.
Viene controllato se l’URL risultante esiste?
No. Non vengono effettuati richieste di rete, interrogazioni DNS, controlli dei reindirizzamenti o test di disponibilità.
Sono ammessi riferimenti contenenti soltanto query o frammento?
Sì. Un riferimento che inizia con ? sostituisce la query; uno che inizia con # modifica il frammento secondo le regole standard.
Che cosa accade se l’URL base è relativo?
La richiesta fallisce con un errore di input non valido, perché una base relativa non fornisce contesto sufficiente per produrre un URL assoluto.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/web/absolute-url-resolve \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base_url":"https://example.com/docs/guides/start.html","relative_reference":"../images/logo.svg?theme=dark#mark"}'const res = await fetch("https://api.kit.forhosting.com/web/absolute-url-resolve", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base_url": "https://example.com/docs/guides/start.html",
"relative_reference": "../images/logo.svg?theme=dark#mark"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/absolute-url-resolve",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base_url": "https://example.com/docs/guides/start.html",
"relative_reference": "../images/logo.svg?theme=dark#mark"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/absolute-url-resolve", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base_url":"https://example.com/docs/guides/start.html","relative_reference":"../images/logo.svg?theme=dark#mark"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base_url":"https://example.com/docs/guides/start.html","relative_reference":"../images/logo.svg?theme=dark#mark"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/absolute-url-resolve", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"base_url": "https://example.com/docs/guides/start.html",
"relative_reference": "../images/logo.svg?theme=dark#mark"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.absolute_url_resolve",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
timeout_sec | 30 |
max_crawl_pages | 25 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |