Страницы

Поиск по вопросам

среда, 10 апреля 2019 г.

Для чего нужен код (хэштег) в конце сайта?

Последнее время заметил код (или хэштег) в адресной строке в конце многих сайтов. К примеру: https://site.ru/blablabla/#.V49UWuLLfK4
Причем при каждом обновлении страницы он меняется, а ссылка работает и без него. Особенно этим грешит medium.com. Для чего это нужно и как это сделать?
Только не пишите про якори. Это не они.


Ответ

Эта часть URL называется "идентификатор фрагмента" (fragment identifier). Кусок URL, извлечь смысл из которого должен клиент, а не сервер. Поэтому, запрашивая документ по HTTP, клиент может эту часть в запросе даже не передавать (возможно, даже обязан не передавать, но надо глянуть в стандарт). Это семантически и высокоуровнево.
Поначалу (и уже довольно давно) эта часть использовалась только для якорей в браузерах. Сервер возвращает весь документ, а клиент смотрит в фрагмент, ищет соответствующий якорь и проскролливает вид до него исключительно ради удобства пользователя. Это вы знаете.
С распространением JavaScript к этой части появился доступ не только у браузера, но и у произвольного кода, присланного сервером. И эта часть стала неплохим местом для хранения небольшого кусочка клиентских данных, о которых серверу знать необязательно, а клиент как-то может отреагировать. Для чего? Ну, для всего, что умеет JavaScript, нужно только применить воображение.

Сейчас это применяется для хранения состояния в небольших SPA прямо внутри ссылки. Это необязательно должен быть именно SPA, это может быть любое браузерное приложение на JS, возможно даже размещённое на нескольких страницах. Просто это короткий термин и понятно о чём.
Ссылку клиент А может послать клиенту Б какими-то своими способами, и, открыв её, можно увидеть приложение точно в том же состоянии, в каком оно было у клиента А. Пример: Coriolis.io, инструмент для обмена сборками кораблей в Elite: Dangerous
Ещё вариация — хранение не всего состояния приложения, а только той части, которая может быть полезна другим пользователям.
Например, роутинг. URL вида http://site.com/#/thing/42 Он осуществлялся в основном через фрагментную часть. Это пока не было HTML5 History API. Теперь есть. И теперь когда сервер можно научить понимать любые URL, можно писать SPA, меняющие "текущий URL" в пределах одной страницы без подобных костылей. AngularJS без "HTML5 mode" работает таким образом. Когда программируемой серверной части нет (или её лень настроить, что бывает), это единственный способ клиентского роутинга, который не ломает получающиеся ссылки: ведь фрагментную часть сервер игнорирует.
Или обмен токенами. Некогда было засилье мессенджеров, работающих через WebRTC, и через фрагментный кусок образовывались комнаты. SPA ищет там токен комнаты, если не находит — генерирует случайный и добавляет его туда. Пользователю остаётся только скинуть ссылку. Перешедшие по ней попадут в SPA, а JS-клиент в нём увидит токен и сразу попросится в указанную комнату, попав к тому, кто ссылку скинул.

Комментариев нет:

Отправить комментарий