Почему http://google.com/a/bogus/url не перенаправляет на 404 URL, и почему это предпочтительнее? - PullRequest
2 голосов
/ 20 сентября 2011
  1. Перейти к http://google.com/a/bogus/url
  2. Вы увидите страницу 404 (HTTP-код 404)
  3. Но URL в вашем браузере остается как http://google.com/a/bogus/url

Почему?

Почему такое поведение предпочтительнее, чем перенаправление на один URL-адрес страницы 404, например http://google.com/pagenotfound или что-то подобное?

Фон

Впервые я заметил это поведение на сайте Drupal, который мы реализовали. Если вы посещаете несуществующую страницу, т.е. http://mysite.com/a/bogus/url/, отображается сообщение «страница не найдена». Если вы извлекаете страницу с помощью TELNET, вы видите, что возвращается правильный код ошибки HTTP 404, но URL не переписывается. Я был в шоке от этого, поэтому я открыл отчет об ошибке на Drupal.org. Записывая отчет об ошибке, я хотел использовать Google в качестве примера того, что (я думал) должно произойти. К моему ужасу, Google делает то же самое!

Почему тебя это волнует? Вы, вероятно, спросите. Что ж, скажем, у меня на сайте установлена ​​Google Analytics. Если URL-адрес страницы 404 был переписан так, как я ожидал, тогда я смогу запустить отчет и посмотреть, сколько раз мои посетители видели мою единственную страницу 404. Тогда я смогу увидеть, откуда они берутся, и, надеюсь, найти ссылку-нарушителя.

В нынешнем виде скрипт Google Analytics будет выполняться с http://mysite.com/a/bogus/url/ и с радостью сообщит, что кто-то только что увидел эту страницу. Как тогда я должен знать, когда кто-то видел страницу 404? Я на самом деле не ищу ответ на мой конкретный вопрос программирования, а скорее понимаю, почему перенаправление не является обычной практикой.

Любые мысли будут с благодарностью.

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

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

Это замедляет работу браузеров, вынуждает их делать лишние совершенно ненужные запросы и может запутать автоматизированные инструменты. Это также означает, что если впоследствии вы поместите файл по адресу a/bogus/url, пользователь не сможет нажать «перезагрузить», чтобы получить его, так как он окажется по адресу, который только когда-либо показывает ошибку. Это также может плохо работать с кешами, так как ответ на перенаправление может быть кеширован.

Хотя случай с 404-й не так плох, как не менее распространенная ошибка перенаправления всех ошибок на стороне сервера (500) на отдельный адрес страницы с ошибкой.

Использование перенаправлений вместо простого возврата другой страницы в ответ, как правило, является артефактом серверных языков сценариев, которые привязывают входящий URL-адрес к представлению, например .asp (*). Google не использует платформу, которая требует, чтобы они указали, какое представление будет возвращено в URL, поэтому им не нужно создавать редирект. Они могут сделать это более эффективным и правильным способом.

(*: хотя даже в ASP [.NET] вы можете использовать Server.Transfer для перехода на другую страницу без перенаправления. К сожалению, среди ASP-кодировщиков это не такая распространенная практика; есть культурные предпочтения - я бы сказал, называть это болезнью - для перенаправлений, которые часто заканчиваются тем, что вызывают ужасные петли перенаправления и устраняют проблемы.)

Как тогда я должен знать, когда кто-то видел страницу 404?

Любой приличный веб-анализатор логов позволит вам осуществлять поиск по HTTP-ответу. Фактически, таким образом вы получите более точные результаты, и в каждом случае вам будет дана точная неверная ссылка, чего не произойдет при перенаправлении.

почему перенаправление не является обычной практикой.

Это - это обычная практика. Это обычная неправильная практика, которую следует избегать.

0 голосов
/ 20 сентября 2011

Почему такое поведение предпочтительнее, чем перенаправление на один URL-адрес страницы 404, например http://google.com/pagenotfound или что-то подобное?

Кто-то, возможно, сделал опечатку. И было бы неплохо узнать / посмотреть, было ли это так.

Также:

Если URL-адрес страницы 404 был переписан так, как я ожидал, тогда я смогу запустить отчет и посмотреть, сколько раз мои посетители видели мою единственную страницу 404.

Разве 404 нет в логах веб-сервера?

...