Autor Zpráva
dragon1357
Profil *
Dobrý den,
Dělám aplikaci v Nedo.js a potřebuji převést relativní odkaz na absolutní.
Aplikace funguje tak, že stáhne stránku, v té poté vyhledá odkazy a relativní převede na absolutní. To znamená, že mám v proměnné string s relativním odkazem + mám adresu stránky.
Mám tento kód:
/* ******************************* */
function rel2abs(base, rellink){
splitedbase = base.split("/");
splitedbase[splitedbase.length-1] = rellink;
var result = splitedbase.join("/");

return result;
}
/* ******************************* */


var base = "http://www.google.cz/this/that";
var rellink = "example.html";

var result = rel2abs(base, rellink);

console.log(result);
Vypadá to, že to zatím funguje, ale nejsem si jist, jestli nemohu narazit nějaký problém. Například pomocí htaccess se dá udělat, že se nezobrazují klasicky www.stranka.cz/page.html, ale jen page (bez .html). Chtěl bych se tedy zeptat, jestli se nemůže stát, že nějaké nastavení URl by to neschroustalo? je to možné? Pokud ano, tak co s tím?
Str4wberry
Profil
Vytvořit absolutní adresu někdy může jít i například pomocným obrázkem:
var img = new Image();
img.src = "example.html";
console.log(img.src);

Tvar adres není záležitost JavaScriptu.
juriad
Profil
dragon1357:
Uvědom si, jak funguje internetová adresa: http://example.com:80/neco/neco-dalsiho/a-jeste-neco#neco-uplne-jineho
Můžeme ji rozdělit na několik částí, podle toho, jak s ní pracuje internetový prohlížeč. Celá část http://example.com:80 říká s jakým serverem a jak se bude komunikovat.
Další část /neco/neco-dalsiho/a-jeste-neco prohlížeč úplně ignoruje, není pro něj zajímavá s jedinou výjimkou.
Pokud se objeví na stránce relativní odkaz, řekněme <a href="nekam">Někam</a>, určí prohlížeč cílovou absolutní cestu následovně: zahodí vše za posledním lomítkem v aktuální adrese a připojí obsah atributu href. Vznikne tedy absolutní adresa /neco/neco-dalsiho/nekam.
Ještě do toho může zasahovat tag <base> uváděný v hlavičce, ale to dnes skoro nikdo nepoužívá.
Poslední část #neco-uplne-jineho má význam jen pro prohlížeč, říká na jakou kotvu má přejí při zobrazení stránky, neodesílá se.

Když se odesílá požadavek na server, složí se následovně:
GET absolutni-cesta HTTP/1.1
Host: domena
… nepovinné hlavičky, závisí na prohlížeči, jaké pošle …

v našem příkladu se po kliknutí na odkaz Někam odešle dotaz:
GET /neco/neco-jineho/nekam HTTP/1.1
Host: example.com
… nepovinné hlavičky, závisí na prohlížeči, jaké pošle …

Je tedy vidět, že lomítka mají v prohlížeči jediný význam, určují jak se bude překládat absolutní cesta; to pravidlo je triviální.

Na straně serveru může běžet libovolné zvěrstvo, které může adresy měnit k nepoznání (třeba nahrazovat pomlčky za lomítka, či naopak).
Šlo by teoreticky mít třeba i šifrovane adresy nějakým klíčem, na straně serveru by se požadavek před zpracováním dekódoval. To už ale vymýšlím ptákoviny.
Chamurappi
Profil
Reaguji na Str4wberryho:
Použití obrázku způsobí, že se na tu adresu vzápětí pošle i HTTP požadavek, což je zbytečné a možná i nežádoucí.
Lepší je vyrobit odkaz a nastavovat/číst href.

Ovšem pokud dragon1357 zmíněným „Nedo.js“ myslí Node.js, tak se pohybuje v úplně jiném prostředí, kde nebude mít při ruce ani Image, ani document.createElement. Patrně ani nebude mít žádnou staticky určenou zdrojovou adresu, ze které by se mohla relativní odvozovat.
dragon1357
Profil *
omlouvám se za překlep.
Tak jsem zjistil, že kód co jsem napsal funguje, až na jeden bug
dejme tomu, že na http://www.neco.cz je odkaz <a href="page.html">.
V tom případě, pokud je původní stránka (base) jen http://www.neco.cz, tak funkce vrátí http://www.page.html. Pokud chci aby to fungovalo správně, tak musím jako base stránku mít http://www.neco.cz/index.html.
Nenapadá vás, co s tím?
Mě napadlo jen nějak zjistit, jestli je adresa ve tvaru htt://www.domena.tld nebo http://www.domena.tld/neco.html. V prvním případě by se ve funkci přidalo za adresu /neco (jedno jestli to neexistuje a to by se pak použilo jako base...
Myslíte, že je to správně? (ne z hlediska jestli to bude fungovat, ale jestli je to korektní)
juriad
Profil
dragon1357:
Pokud adresa neobsahuje lomítko, tedy je to jen samotná doména, tak ho prostě přidej na konec.
Tím to převedeš na případ, který ti funguje, a můžeš zavolat svou funkci.
dragon1357
Profil *
Ok, děkuji. Nedošlo mi, že vlastně http://www.domena.tld/ uz je pro moji funkci korektní vstup

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0