В настоящее время я пишу веб-приложение с использованием angularjs, но я думаю, что этот вопрос относится к любой клиентской платформе javascript, которая выполняет маршрутизацию на стороне клиента (как это делает angular).
Как правильно поступать с неправильными URL-адресами в одностраничном приложении?
Просматривая несколько крупных сайтов, я вижу, что Gmail будет перенаправлять во входящие, если вы введете любой случайный URL-адрес ниже https://mail.google.com/mail/. Это происходит на стороне сервера (с кодом http 300) или на стороне клиента, в зависимости от того, находится ли неправильный путь до или после символа #. С другой стороны, twitter показывает настоящий HTTP 404 для любого недопустимого URL. Третий вариант - показать "мягкий" 404, страницу с чисто клиентской ошибкой.
Эти решения кажутся подходящими для разных ситуаций. Твиттер хочет, чтобы ссылки на пользователей твиттера и твиты были реальными, чтобы люди могли делиться ими, публиковать их в новостных статьях и т. Д., Поэтому важно, чтобы недействительные ссылки распознавались как таковые (если у меня есть неработающая ссылка на твит в мой веб-сайт, простой сканер скажет мне это). В gmail, с другой стороны, от вас не ожидается, что вы будете делиться ссылками в своем почтовом ящике, и я даже не уверен, действительно ли ссылки являются постоянными / постоянными: кажется, что обновление URL-адреса в основном служит цели навигации по истории браузера в пределах одностраничное приложение. Третий способ выдачи мягких ошибок может быть подходящим для ситуаций, подобных gmail, но там, где нет разумной страницы "по умолчанию".
После этого длинного вступления задаются некоторые конкретные вопросы:
- Приемлемо ли когда-либо выдавать «мягкую» страницу с ошибкой вместо ошибки 404, или одностраничное приложение всегда должно перенаправлять на настоящий 404, если URL-адрес недействителен?
- Код Gmail может быть совершенно безошибочным, но если в нем есть ошибка, приводящая к недействительным ссылкам, которые в конечном итоге перенаправляют обратно во входящий почтовый ящик, это может сбить с толку пользователей даже больше, чем страница с ошибкой. Для большинства веб-приложений, которые не так хорошо протестированы, как Gmail, не лучше ли отображать страницу с ошибкой?
- Чтобы реализовать настоящие 404-е для одностраничных приложений, кажется необходимым продублировать логику маршрутизации на стороне сервера. Есть ли способ обойти это?
- При перенаправлении на 404, я думаю, пользователь должен видеть URL-адрес, вызвавший ошибку, возможно, в строке URL-адреса. Я думаю, что с помощью api истории html5 это можно сделать, просто запустив перезагрузку текущей страницы (с неправильным URL-адресом) в сочетании с маршрутизацией на стороне сервера, упомянутой выше. Для браузеров, которые не поддерживают это, или при использовании нотации hashbang, это не представляется возможным. Как лучше всего поддерживать все браузеры?