wszystko co musisz wiedzieć o adresach URL

URL na przykładzie google

Codziennie go używasz, choć często nie zwracasz na niego uwagi. Na jego koncepcie oparty jest niemalże cały współczesny Internet. Wiele osób go nie rozumie, ale ja liczę na to, że po lekturze dzisiejszego wpisu, wy nie będziecie się do nich zaliczać. Przyszedł czas, aby napisać co kryje się za hasłem URL.

Zaczniemy, niezbyt oryginalnie, bo od definicji. Wikipedia rzecze:

URL (ang. Uniform Resource Locator) – oznacza ujednolicony format adresowania zasobów (informacji, danych, usług) stosowany w Internecie i w sieciach lokalnych.

URL najczęściej kojarzony jest z adresami stron WWW, ale ten format adresowania służy do identyfikowania wszelkich zasobów dostępnych w Internecie.

Z tego miejsca warto wspomnieć o dwóch podobnych terminach, często błędnie stosowanych, mam na myśli: URN i URI. Na scenę ponownie zapraszam Wikipedię:

URN (ang. Uniform Resource Name) – ujednolicony format nazw zasobów (głównie książek). URN składa się z identyfikatora przestrzeni nazw (ang. Namespace IDentifier, NID) i łańcucha (ciągu znaków) specyficznego dla przestrzeni nazw (ang. Namespace Specific String, NSS).

URI (ang. Uniform Resource Identifier, tłum. Ujednolicony Identyfikator Zasobów) jest standardem internetowym umożliwiającym łatwą identyfikację zasobów w sieci.

Okej, zakładam jednak, że jeśli regułki nie pokomplikowały spraw bardziej, to co najwyżej wasze pojęcie o temacie jest tak samo mgliste jak było. Przetłumaczmy to więc na ludzki język!

URL = ujednolicony format adresowania zasobów. Oznacza to tyle, że za pomocą adresów jesteś w stanie uzyskać dostęp do jakiegokolwiek zasobu w sieci. Słowo „zasób” oznacza dosłownie wszystko co da się przetłumaczyć na zera i jedynki. Najczęściej jest to strona internetowa, ale równie dobrze może to być obrazek, utwór, baza danych lub serwer. Znając URL i oczywiście mając wystarczające uprawnienia, masz możliwość przeglądania dowolnych treści opublikowanych w Internecie.

URN natomiast odwołuje się do zasobu za pomocą jego nazwy. Składa się z dwóch części: NID (ang. Namespace ID) identyfikatora przestrzeni nazw, który określa z jakiego typu zasobem mamy do czynienia (np.: urn:isan: isan- International Standard Audiovisual Number – przestrzeń nazw dla treści audiowizualnych, np. filmów) oraz NSS(Namespace Specific String) ciągu znaków specyficznego dla przestrzeni nazw- najprościej mówiąc tekstu jednoznacznie wskazują na konkretny zasób).

Zostało jeszcze URI- to określenie zbiorcze. Może być nim zarówno URL jak i URN.

Skąd wzięły się adresy URL?

CERN - miejsce powstania adresów URL
Unikalne adresy zasobów zostały przedstawione światu w roku 1994 wraz z publikacją dokumentacji RFC 1738. Pomysłodawcą i twórcą był, nie kto inny, jak ojciec Internetu- sir Tim Berners-Lee, pracujący w ośrodku badawczym CERN w Genewie. Koncept powstał przy wykorzystaniu wcześniejszych wynalazków, takich jak nazwy domen. Ciekawostka: sam autor żałuje, że separatorami pomiędzy poszczególnymi elementami URLa są kropki zamiast slashy. Uważa też podwójny slash po nazwie protokołu za zbędny. Pomyśl tylko, gdyby tak się stało, adresy byłyby nieco inne:

http:www/facebook/com
http:www/mail/google/com

Elementy adresu

elementy

Jak zapewne zauważyliście, każdy adres ma bardzo podobną strukturę, w której da się wyodrębnić kilka stałych elementów. Poniżej omówiłem wszystkie z nich.

Protokół

protokół

Określa ustandaryzowany sposób, w jaki zachodzi wymiana danych między komputerami. Obecnie najpopularniejszym jest http (ang. hypertext transfer protocol) służący do ładowania dokumentów html. Inny popularny to https – bezpieczny odpowiednik poprzedniego (s -> secure). Używany podczas dostępu do stron, w których szczególnie niepożądane byłyby działania nieupoważnionego użytkownika: konta bankowe, skrzynki e-mail, facebook, czy inne strony, weryfikujące korzystającego, np.: w procesie logowania. Oprócz powyższych, na pewno nie raz, być może nieświadomie, korzystałeś z inny protokołów takich jak: ftp służący do wymiany plików, smtp – obsługujący korespondencję elektroniczną, ssh – do uzyskiwania bezpiecznego dostępu do zasobów przez niebezpieczną sieć (np. zdalne łączenie się z komputerem) i wiele, wiele innych.

Domena

Jej nazwa ma za zadanie unikalnie zidentyfikować stronę w Internecie. Wyrażana zarówno w formie tekstowej, np. www.bushidoprogramisty.pl lub adresu IP, np.: 173.241.11.23. Składa się z dwóch elementów: TLD (ang. top-level domain), używając przykładu bloga, będzie to pl. Drugim jest SLD (ang. second-level domain) – pozostała część. Bywa też, że URL zawiera też subdomenę, np. forum.bushidoprogramisty.pl lub mail.bushidoprogramisty.pl. Zazwyczaj wskazuje on na serwis lub usługę skupioną wokół głównej strony, ale działająca niezależnie od niej.

Port

Coś czego na ogół nie widać i większość użytkowników nie ma świadomości jego istnienia. Bez niego jednak niemożliwe jest połączenie z żadnym adresem. Znajduje się tuż za nazwą domeny, oddzielony dwukropkiem. Możecie spróbować sami: www.bushidoprogramisty.pl:80. Użyłem nieprzypadkowego numeru, został on zarezerwowany dla protokołu http. Większość portów jest wolnych, niemniej jednak część z nich używają różne usługi i nie można wykorzystywać ich do własnych potrzeb, przykłady:

https -> 443
ssh -> 22
smtp -> 50
ftp (tryb aktywny, transfer danych) -> 20
ftp (tryb aktywny, polecenia) -> 21

Ścieżka

URL na przykładzie facebooka

Adres witryny wskazuje na jej stronę startową oraz główny katalog w strukturze plików na serwerze. Gdy chcesz uzyskać dostęp do podstron, trzeba podać odpowiednią ścieżkę do właściwego pliku z jej zawartością. Przykład:
www.bushidoprogramisty.pl/kontakt

Query

Dynamiczne strony internetowe często korzystają z tzw. queries. Używa się ich w miejscach, gdzie różne dane można przedstawić w ten sam sposób. Przykładem może być wyświetlanie szczegółowych informacji o książkach w sklepie on-line. Każda podstrona książki ma podobny wygląd. Zawiera np.: zdjęcie, autora, sprzedawcę, cenę, numer isbn, opcje dostawy, etc. Różnicą jest tylko treść danych, inne będą dla W pustyni i w puszczy i dla Władcy Pierścieni. Dobrym pomysłem więc będzie wyświetlenie ich na tej samej podstronie i parametryzowanie danych używanych do jej wypełnienia. Pojawia się jednak problem. Jak rozróżnić, o którą książkę pytamy i jakie dane wyświetlić? Z pomocą przychodzą właśnie queries, dzięki nim możemy przesyłać dodatkowe informacje. W naszym przykładzie najrozsądniej byłoby podać identyfikator książki jednoznacznie wskazujący konkretną pozycję. URL mógłby wyglądać tak:
http://www.sklepzksiazkami.pl/ksiazka?id=125.
Query tutaj to: ?id=125. Jak widzisz rozpoczyna ją znak ‘?’, a informacje przekazywane są w formie klucz=wartość. Istnieje możliwość przekazania wielu parametrów. Ich separatorem jest znak ‘&’, przykład: ?id=125&language=pl&browser=chrome.

Fragment

Ostatni element występujący w URLu to fragment. Czasami nazywany kotwicą (ang. anchor). Wskazuje on na określone miejsce na stronie internetowej. Oznaczany jest znakiem ‘#’. Również po wpisaniu URLa z fragmentem zostajemy przeniesieni na część strony, o której informuje fragment. Z przykładem zastosowania możesz spotkać się używając Wikipedii. Gdy otworzysz długi artykuł i klikniesz na jeden z nagłówków w spisie treści, przeglądarka automatycznie przeniesie Cię w odpowiednie miejsce w dokumencie. Zwróć uwagę, że w polu adresu pojawiła się dodatkowa część zaczynająca się od ‘#’- to właśnie fragment. Skopiowanie całego linku i wklejenie go w nowej karcie, skutkować będzie otworzeniem strony w tym samym miejscu, a nie na górze, jak bywa to w zwykłym przypadku.

Do pełni podstawowej wiedzy brakuje jeszcze informacji o dwóch rodzajach URLi, mianowicie:
• bezwzględnym (ang. absolute),
• względnym (ang. relative).

Właściwości obu z nich dokładnie opisują ich nazwy. Pierwszy z nich zawsze jednoznacznie wskazuje na jakiś zasób, niezależnie od tego gdzie go użyjemy – nie potrzebuje żadnego odniesienia. Wszystkie poprzednie przykłady dotyczyły właśnie adresów tego typu. Drugi natomiast, jak w nazwie, zależy od miejsca, w którym jest umieszczony i odnosi się np.: do struktury folderów. Najłatwiej będzie to zobrazować na przykładzie:

przykładowa struktura plików strony internetowej

Przemierzając ścieżkę prowadzącą do poznania bushido programisty natrafiłeś dzisiaj na informacje związane z adresami. W tym wpisie omówiliśmy definicję, historię, rodzaje oraz elementy URLi. Czy coś Cię zaskoczyło? Mam nadzieję, że rozjaśniłem Ci ten temat i pogłębiłem Twoją wiedzę. Jeśli tak, to koniecznie napisz o tym w komentarzu. A może wręcz przeciwnie? Wtedy tym bardziej daj mi o tym znać. Przypomnę też, że gdy masz jakąś propozycję tematu, to zawsze chętnie na nią spojrzę i przemyślę.

Please follow and like us:

2 Replies to “wszystko co musisz wiedzieć o adresach URL”

  1. „Ciekawostka: sam autor żałuje, że separatorami pomiędzy poszczególnymi elementami URLa są kropki zamiast slashy. ”

    Inna ciekawostka,
    żeby być w pełni poprawnym, powinniśmy wchodzić na adres onet.pl. a nie onet.pl – dlaczego?
    Kilka pytań/zagadnień, nad którymi się zastanów:
    1. UDP HolePunching. Dlaczego nie TCP HolePunching?
    2. Unix sockety
    3. Napisałeś, że nie można nawiązać połączenia nie znając portu. Jak do tego wszystkiego ma się ping (ICMP) ?
    4. Jaka idea stoi za CDNami?
    5. Na czym polega różnica pomiędzy hubem a switchem?
    6. Skąd przeglądarka wie, że może ufać mbank.pl? Potrafiłbyś przekonać przeglądarkę, żeby zaakceptowała niepoprawny certyfikat?
    7. Czy istnieje różnica w wydajności pomiędzy dostępem do serwera w USA a serwerem w Niemczech? Od czego to zależy?
    8. Czy możesz przechwycić pakiety sieci w sieci WIFI sąsiada? Co Ci to da? Albo dlaczego CI to nic nie da?
    9. Czym jest socket? Jest parą (adres IP, port) czy trójką (interfejs, adres IP, port)?

    Wiele z pytań jest podchwytliwych, niektóre są trudne. Wierzę, że odpowiedź na nie, pomoże głębiej zrozumieć tematy, które tu poruszyłeś.

    1. Dziękuję Tomku za komentarz,
      poruszyłeś w nim wiele istotnych kwestii, które w przyszłości będę chciał omówić w kolejnych postach. Blog kierowany jest do osób, które chciałyby rozpocząć przygodę z programowaniem, często od zera. Nie chciałbym ich w żaden sposób przytłaczać wiedzą, a raczej porcjować ją w łatwo przyswajalne części ze zwiększonym stopniem trudności. Dzięki temu osoby mniej doświadczone, będą mogły krok po kroku gromadzić informacje, natomiast ludzie z większym doświadczeniem nie będą zmuszone do czytania. Jestem przekonany, że takie podejście będzie lepsze dla ogółu czytelników.
      Pozdrawiam, Kuba 🙂

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.