belarusweb.net - веб-программирование для новичков: HTML,CSS, JavaScript, PHP, MySQL и др.

# Понятие абсолютного и относительного пути в веб-программировании

В ходе разработки сайта довольно часто приходится прописывать абсолютные и относительные пути к различным ресурсам, например, изображениям, файлам со скриптами, страницам своего или стороннего сайта. Поэтому важно правильно понимать как принцип построения абсолютных и относительных адресов, так и преимущества и недостатки их применения в различных ситуациях.

Абсолютный или полный адрес начинается с указания протокола передачи данных и содержит имя сайта. Например, абсолютными являются адреса http://localhost/belarusweb.net и http://belarusweb.net, где первый адрес указывает абсолютный путь к корневой папке сайта на локальном сервере, а второй – в сети Интернет.

Следует отметить, что стандартизированным способом записи адреса ресурса в сети Интернет является URL (от англ. Uniform Resource Locator – единый указатель ресурса), который как раз и представляет собой абсолютный адрес, позволяющий не только однозначно находить в Интернете нужную страницу, но и обмениваться с сервером информацией при помощи GET-запросов. В общем случае URL можно схематично представить в виде:
<схема>://<логин>:<пароль>@<хост>:<порт>/<url-путь>?<параметры_get-запроса>#<якорь>, где

- схема – это способ обращения к ресурсу; в большинстве случаев имеется в виду сетевой протокол, который представляет собой набор правил, позволяющий осуществлять соединение и обмен данными между двумя и более включёнными в сеть устройствами; указанный в URL тип сетевого протокола отделяется от хоста комбинацией символов '://'; примерами сетевых протоколов могут служить:
  - ftp (от англ. File Transfer Protocol – протокол передачи файлов) – стандартный протокол, предназначенный для передачи файлов по TCP-сетям; FTP-протокол часто используется для загрузки сетевых страниц и других документов с компьютера разработчика на сервер хостинг-провайдера;
  - http (от англ. HyperText Transfer Protocol – протокол передачи гипертекста) – протокол прикладного уровня, который повсеместно используется в интернете для обмена информацией с веб-сайтами;
  - https (от англ. HyperText Transfer Protocol Secure) – расширение протокола HTTP, поддерживающее шифрование данных;
  - и ряд других сетевых протоколов;
- логин – имя пользователя, используемое для доступа к ресурсу;
- пароль – соответствующий логину пароль, который отделяется от логина двоеточием;
- хост (от англ. host – принимающий гостей) – полностью прописанное доменное имя хоста в системе DNS или IP-адрес хоста в форме четырёх групп целых десятичных чисел в интервале от 0 до 255, разделённых точками; например, в качестве доменного имени можно взять имя нашего сайта belarusweb.net, а примерами IP-адресов могут служить сетевой адрес роутера 192.168.1.1 или мой текущий адрес в сети Интернет 93.84.33.158; в случае использования в адресе пары 'логин:пароль' после пароля должна присутствовать собачка '@';
- порт – используется для определения процесса-получателя пакета в пределах одного хоста и представляет собой натуральное число, которое пишется через двоеточие после хоста; например, протокол HTTP использует стандартный порт 80, а HTTPS – 443; отметим, что браузеры стандартные порты обычно не показывают;
- url-путь – уточняющая информация о месте нахождения ресурса (зависит от протокола); например, для привычного нам протокола HTTP путь к страничке с данной статьей на моем локальном сервере имеет вид '/articles/articles_general/articles_general_6.html';
- параметры – строка GET-запроса с передаваемыми на сервер параметрами, которая отделяется от пути знаком вопроса '?'; сами параметры записываются парами в виде 'имя=значение', а пары отделяются друг от друга символом амперсанда '&', например, '?name=Ivan&lastName=Ivanov';
- якорь – идентификатор 'якоря', к которому будет прокручена открываемая веб-страница; якорь отделяется от остального содержимого адреса символом хэша '#'.

Для большей наглядности, приведем в качестве примеров абсолютных путей почти реальные url-адреса:

    	http://belarusweb.net/bel_files/php/registration.php?name=Ivan&lastName=Ivanov;

    	http://belarusweb.net/html/html_textbook/html_textbook_1.html#p_1_1.

Абсолютные адреса используются на сайте для ссылок на сторонние ресурсы, а также файлы и страницы самого сайта. При этом нужно иметь в виду, что при смене доменного имени (имени сайта) или переносе сайта с локального сервера на сервер провайдера придется внести соответствующие изменения во все элементы, использующие абсолютную адресацию. Однако сделать это не сложно, поскольку замена может быть осуществлена, например, в том же notepad++, всего за пару простейших операций.

Относительный адрес (путь, ссылка) ведет свой отсчет относительно корня сайта или текущего каталога, в котором находится данный веб-документ. Рассмотрим принцип построения относительных адресов.

Пусть наша гиперссылка находится в документе, расположенном на локальном сервере по адресу http://localhost/site/doc_1/doc_2/ ... /doc_n/web_page.html, где doc_n – папка n-го уровня вложенности. В этом случае папка doc_n, в которой находится наш документ с гиперссылкой, автоматически принимается за основу, относительно которой и строится вся адресация. Итак:

- Если нужно, чтобы ссылка вела на целевой документ new_page.html, расположенный в той же папке doc_n, что и наш исходный документ с гиперссылкой, то в качестве значения атрибута href ссылки нужно просто задать имя целевого документа: href="new_page.html".
- Для перехода к целевому документу, расположенному в папке http://localhost/site/doc_1/doc_2/ ... /doc_n/doc_n_1/ ... doc_n_k/web_page.html, значение атрибута href ссылки должно включать только папки, вложенные в doc_n, и, конечно же, имя целевого документа: href="doc_n_1/ ... doc_n_k/new_page.html". Таким образом, мы указываем браузеру, что он должен зайти в папку doc_n_1, расположенную в папке doc_n с исходным документом, в котором прописана гиперссылка, затем в папку doc_n_2 и так далее, пока не попадет в папку doc_n_k с находящимся там целевым документом, который он и должен открыть.
- Чтобы попасть в папку на уровень выше исходной, используется специальная комбинация символов '../'. Для перехода на n уровней вверх нужно записать комбинацию '../' n раз подряд. Так в нашем случае, чтобы перейти по ссылке к целевому документу http://localhost/site/doc_1/doc_2/ ... /doc_n-3/new_page.html атрибут href ссылки должен иметь значение "../../../new_page.html". Тем самым мы сообщаем браузеру, что он должен подняться в папку doc_n-1, затем doc_n-2 и doc_n-3, после чего открыть находящийся там целевой документ new_page.html.
- Если же необходимо не просто подняться на несколько уровней вверх, но и зайти там в папку (или несколько вложенных папок), для получения доступа к целевому документу, то в значении атрибута href ссылки сперва нужно прописать требуемое количество уровней поднятия вверх при помощи символов '../', а затем дописать путь из полученной папки к целевому документу. Например, если целевой документ расположен в папке new_doc и адресный путь к нему имеет вид http://localhost/site/doc_1/doc_2/ ... /doc_n-3/new_doc/new_page.html, то атрибут href ссылки должен иметь значение "../../../new_doc/new_page.html". Т.е. мы указываем браузеру, что он должен подняться на три уровня вверх относительно исходной папки doc_n, в которой находится документ с гиперссылкой, а затем зайти в папку new_doc и открыть целевой документ new_page.html

В качестве примера вы можете скачать учебный минисайт, построенный полностью на основе относительной адресации. После просмотра поэкспериментируйте, изменяя и создавая новые ссылки, папки и страницы.

Относительные ссылки очень удобны при разработке браузерных офф-лайн приложений, например, справочных руководств. Однако следует помнить, что при переносе документа из текущей папки в другую, все относительные ссылки в нем перестанут работать. Поэтому их придется переписывать. Если же относительные ссылки указывают на файлы, которые также находятся внутри текущей папки либо во вложенных папках, то после переноса данной папки в другое место все ссылки в документе останутся рабочими.

Если необходимо начать отсчет относительного пути от корня сайта, в начале пути следует прописать слэш '/'. Например, ссылка '<a href="/index.html">Домой</a>' указывает на документ, который находится в корневой папке сайта (а не в текущей!). Следует иметь в виду, что отсчет от корня сайта работает только под управлением реального веб-сервера. На локальном сервере, например, Xampp, отсчет нужно начинать с имени корневой папки.

belarusweb.net © Петр Романовский, Минск, 2016.