Страница ошибки
Страница ошибки — тело ответа, когда показать запрошенное нельзя: «не найдено», «нет доступа», «сервер не справился». Крупно стоит код состояния HTTP, под ним — приглушённое пояснение, что случилось и куда идти дальше. Шапку, тему и статику вокруг добавляет каркас страницы, как у любой другой страницы.
Когда использовать#
- Запрошенного объекта нет: 404.
- Объект есть, но этому человеку его видеть нельзя: 403.
- Сервер не смог ответить, и человеку нужно сказать об этом по-человечески: 500, 503.
Не берите страницу ошибки, когда объект есть, но пуст, — это пустое состояние. Ошибка отправки формы показывается тостом над той же формой, а не отдельной страницей: введённое не должно пропасть.
Код и пояснение#
Код — целое от 100 до 599, оно печатается заголовком первого уровня. Сообщение — абзац под ним.
404
404
Объект не найден
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код, Сообщение",
404, "Объект не найден"));Пояснение необязательно. Без него остаётся один код — так бывает, когда объяснять причину отказа значит раскрыть лишнее.
403 без пояснения
403
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код", 403));В дереве холста код ставится позицией; слов у узла нет, поэтому пояснение приходит прежней моделью, как в разделе Узлом холста ниже (см. Язык узлов).
Узлом холста — словами
403
HTML = Кит.СтраницаОшибки(403).Рендер();Компонент только печатает тело. Состояние ответа ставит контроллер — тот же код, что на странице: страница «404» с ответом 200 обманет и поисковик, и мониторинг.
Ответ.УстановитьСостояниеНеНайдено();
Ответ.ТелоТекст = Каркас.Страница("Не найдено", Набор.СтраницаОшибки().Отрисовать(
Новый Структура("Код, Сообщение", 404, "Такой страницы нет")), Контекст);
Пояснение со ссылкой#
СообщениеHTML — пояснение своей разметкой, обычно со ссылкой туда, где искать дальше. Оно задаётся вместо Сообщение и вставляется как есть: собирайте его кодом, а не из адреса запроса.
404 с ходом к списку
404
Документ мог быть удалён или переехать. Вернитесь к списку документов.
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код, СообщениеHTML",
404, "Документ мог быть удалён или переехать. Вернитесь <a href=""/документы"">к списку документов</a>."));503 — сервер на обслуживании
503
Идёт обновление. Через несколько минут всё заработает — данные не пострадают.
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код, Сообщение",
503, "Идёт обновление. Через несколько минут всё заработает — данные не пострадают."));Код вне 100..599 или не целый — ошибка разработчика, и кит отказывается печатать такую страницу.
Код 42 — исключение с объяснением
Попытка
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код", 42));
Исключение
HTML = Набор.Тост().Отрисовать(Новый Структура("Текст, Вид",
ИнформацияОбОшибке().Описание, "ошибка"));
КонецПопытки;Гайдлайны#
404
Проекта нет — возможно, его удалили. Все проекты.
Код
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код, СообщениеHTML",
404, "Проекта нет — возможно, его удалили. <a href=""/проекты"">Все проекты</a>."));500
Поле объекта не обнаружено (Ссылка) at Модуль.ПолучитьПроект(), строка 214
Код
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код, Сообщение",
500, "Поле объекта не обнаружено (Ссылка) at Модуль.ПолучитьПроект(), строка 214"));403
У вас нет доступа к этому пулу. Попросите владельца пула добавить вас в участники.
Код
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код, Сообщение",
403, "У вас нет доступа к этому пулу. Попросите владельца пула добавить вас в участники."));403
Доступ запрещён! Вы не имеете права здесь находиться.
Код
HTML = Набор.СтраницаОшибки().Отрисовать(Новый Структура("Код, Сообщение",
403, "Доступ запрещён! Вы не имеете права здесь находиться."));Доступность#
- Код печатается
<h1>: это первый и главный заголовок страницы, скринридер начнёт с него. Сообщениеэкранируется — адрес запроса или текст исключения, попавший в пояснение, разметкой не станет.СообщениеHTMLне экранируется, поэтому его собирают только из своих строк.- Код в заголовке понятен не всем. Где можно, пусть пояснение называет ситуацию словами («Страницы нет», «Нет доступа»), а не повторяет одно число.
- Заголовок вкладки браузера задаёт каркас (первый параметр
Каркас.Страница): пишите в него слова, а не код.
Узлом холста#
На холсте тело отказа — узел рода «отказ».
Страница ошибки узлом дерева
404
Объект не найден
HTML = Кит.СтраницаОшибки(Новый Структура("Код, Сообщение",
404, "Объект не найден")).Рендер();Модель#
Структура ниже — модель и для набора, и для Кит.СтраницаОшибки: без пояснения узлу хватает одного кода.
СтраницаОшибки.Отрисовать()src/Классы/компоненты/СтраницаОшибки.os
Отрисовывает тело страницы отказа: код состояния и приглушённое пояснение.
Параметры:
Модель - Структура - Код (состояние HTTP, целое 100..599, ОБЯЗАТЕЛЕН), Сообщение
(экранируется), СообщениеHTML (ДОВЕРЕННАЯ разметка, вместо Сообщение).
Возвращаемое значение:
Строка - HTML-фрагмент. Кидается исключением, если Код невалиден.Кит.СтраницаОшибки()src/Классы/холст/Кит.os
Тело страницы отказа: код состояния и пояснение. Параметры: Модель - Структура, Число - модель компонента «Страница ошибки» либо код состояния. Возвращаемое значение: ЭлементЭкрана