Лучшие практики для клиентской и серверной редиректов: когда и что использовать? - PullRequest
20 голосов
/ 22 февраля 2010

Я понимаю, что большинство языков поддерживают перенаправления на стороне сервера (asp.net: Response.Redirect, PHP: header( 'newpage' ) ; ). Вы также можете сделать редирект с помощью JavaScript (window.location.href="newLocationURL").

Когда бы вы выбрали один из других?

Что касается пула ASP.net/IIS7(app в интегрированном режиме, включить 32-битные приложения = false), я заметил, что даже когда страница имеет заголовок 302, все тело страницы отправляется на клиентскую сторону.

И Я полагаю, что это не так с PHP , отправляются только заголовки? Цитировать Перенаправление на стороне клиента означает следующие шаги: на стороне клиента -> на стороне сервера -> на стороне клиента -> на стороне сервера -> на стороне клиента.

Перенаправление на стороне сервера означает: на стороне клиента -> на стороне сервера -> на стороне клиента (только заголовки) * -> на стороне сервера -> на стороне клиента.

Существуют ли стандартные реализации W3C или перенаправление на стороне сервера от технологии веб-сервера к другой?

Редактировать: меня интересует только Response.Redirect (в asp.net), а не server.transfer, по крайней мере, для этого обсуждения

Ответы [ 3 ]

9 голосов
/ 22 февраля 2010

Пример JavaScript на самом деле не редирект . Нет средств для ответа 301/302 . Это простой запрос, который происходит во время определенного события Javascript спустя долгое время после того, как страница поступила. Если вы сделаете это во время загрузки страницы, это приведет к большим издержкам, чем реальное перенаправление, и не будет работать и в браузерах с отключенной JS.

Перенаправления должны инициироваться со стороны сервера с ответом 301/302. Для всех языков / рамок веб-приложения по умолчанию установлено значение 302. Обычно это можно сделать 301, добавив один дополнительный параметр или строку кода, которая указывает это. Преимущество 301 заключается в том, что поисковые запросы не индексируют (больше) конкретный запрос.

4 голосов
/ 22 февраля 2010

В ASP.Net существует важное различие между двумя видами перенаправлений на стороне сервера. Это Response.Redirect и Server.Transfer.

Если вы позвоните Response.Redirect , это повлечет за собой две поездки в оба конца на сервер. При первом обращении к серверу ответ сервера указывает браузеру запросить следующую страницу. Запрос на следующую страницу представляет собой вторую обратную передачу на веб-сервер.

Если вы используете Server.Transfer , существует только одна поездка туда и обратно. Поэтому сетевого трафика намного меньше. Однако существует ограничение на использование Server.Transfer, заключающееся в том, что целевая страница должна находиться на одном веб-сервере. То есть вы не можете перенести Server.Transfer из своего веб-приложения на www.Google.com. Но вы можете ответить. Переадресация на него.

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

0 голосов
/ 22 февраля 2010

Это действительно зависит от того, где вы решили, что вам нужно перенаправить. Если это код на стороне сервера, который определяет, что вы должны перенаправить, то это код на стороне сервера, который выполняет команду перенаправления. Если вы можете решить на стороне клиента необходимость перенаправления, сделайте это из кода клиента.

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

...