Продолжайте знакомить с первой частью серии «Единый вход и управление разрешениями»: сущность единого входа и управления разрешениями. В этой статье рассказывается о перенаправлении HTTP, которое также является базовым знанием для выполнения единого входа.
Полный план написания серии можно найти по адресу:Обзор серии
Единый вход должен переключаться между несколькими веб-проектами и использовать технологию перенаправления для автоматического завершения операции входа. Кроме того, когда фактические ресурсы переносятся на другие URL-адреса, можно использовать технологию перенаправления для автоматического перехода к новому URL-адресу для запросов на доступ к исходному URL-адресу, сохраняя действительным исходный URL-адрес.
В этой статье в основном представлены следующие аспекты:
- Основные понятия перенаправления
- Nginx редирект
- Перенаправление сервлета
- Spring использует перенаправление
основная концепция
Фундаментальный
В протоколе HTTP сервер реализует перенаправление, отправляя определенный ответ.После получения ответа браузер может определить перенаправление в соответствии с кодом состояния и использовать указанный новый URL-адрес для повторного запроса. Код состояния перенаправленного ответа — 3xx, а разные коды состояния указывают на разные типы перенаправления.
Браузер получает новый URL-адрес из местоположения в заголовке ответа и повторно отправляет запрос.
тип перенаправления
Типы перенаправления включают постоянное перенаправление, временное перенаправление и специальное перенаправление.Различные типы перенаправления будут влиять на работу браузера, с одной стороны, и на индексацию поисковых систем, с другой стороны.
Постоянная переадресация означает, что исходный URL-адрес больше не используется, и сначала следует выбрать новый URL-адрес. Когда робот поисковой системы сталкивается с этим кодом состояния, он инициирует операцию обновления и использует новый URL-адрес. Общие коды состояния: 301, перемещено навсегда.
Временное перенаправление, если запрошенный ресурс временно недоступен, но доступен из другого места. Поисковые системы не фиксируют эту временную ссылку. Общие коды состояния: 302 Found, 307 Temporary Redirect.
Специальное перенаправление, 304 Not Modified ресурс не изменен, веб-страница будет получена из локального кеша, 300 Multiple Choice — это ручное перенаправление, пользователь может выбрать перенаправленную страницу.
Установить метод перенаправления
В дополнение к описанному выше методу перенаправления, перенаправление также может быть достигнуто через элемент metay HTML или JS, но рекомендуется предпочесть метод, описанный выше.
<head>
<meta http-equiv="refresh" content="0;URL=https://www.mi.com" />
</head>
Значение атрибута содержимого, первое число указывает, сколько секунд ждать до прыжка.
window.location = "https://www.mi.com";
Nginx редирект
rewrite
Основная функция перезаписи nginx заключается в реализации перенаправления URL.Правила грамматики следующие:
rewrite <regex> <replacement> [flag]
регулярное выражение регулярного соответствия URL, который необходимо перенаправить замена Замена содержимого, замена обычного соответствующего содержимого заменой флаг флаг, как показано ниже:
- last: после того, как это правило будет сопоставлено, продолжайте сопоставлять новую перезапись вниз;
- Перерыв: Это правило прекращается, когда совпадение завершено, и следующие правила больше не совпадают;
- перенаправление: вернуть 302 временное перенаправление;
- постоянный: вернуть 301 постоянный редирект;
Конфигурация сегмента метки параметра перезаписи: сервер, местоположение, если
переписать пример
Перенаправить mi.com на www.mi.com
server {
listen 80;
server_name mi.com;
rewrite ^/(.*) http://www.mi.com/$1 permanent;
}
return
Его можно перенаправить напрямую через return следующим образом:
server {
listen 80;
server_name example.com;
return 301 $scheme://www.mi.com$request_uri;
}
Перенаправление сервлета
В первую очередь необходимо различать понятия переадресация и перенаправление.Переадресация осуществляется на стороне сервера, и адрес в адресной строке браузера не меняется.Это запрос, перенаправление осуществляется на стороне браузера, и адресная строка браузера изменится. , это вторичный запрос.
Будь то перенаправление или перенаправление, не выводите содержимое клиенту, пока метод не будет выполнен.
Вперед
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
response.setContentType("text/html; charset=utf-8");
ServletContext sc = getServletContext();
RequestDispatcher dispatcher = null;
dispatcher = sc.getRequestDispatcher("index.jsp");
dispatcher.forward(request, response);
}
перенаправить
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
response.setContentType("text/html; charset=utf-8");
response.sendRedirect("/index.jsp");
}
Spring использует перенаправление
без параметров
return new ModelAndView("redirect:/toList");
return "redirect:/toList";
с параметрами
public String test(RedirectAttributes attributes)
{
attributes.addAttribute("hello", "hello");
return "redirect:/toList";
}
Это автоматически добавит параметры на перенаправленные URL.
Версия Spring MVC 3.1 добавляет новую функцию, атрибут Flash, который может передавать параметры и решать проблему повторной отправки.
При обработке обычного контроллера, после завершения обработки, он будет перенаправлен на страницу с успешной операцией.Если пользователь нажмет F5, он будет отправлен снова.Если используется перенаправление, этой проблемы можно избежать.
public String test(RedirectAttributes attributes) {
attributes.addFlashAttribute("hello", "hello");
return "redirect:/toList";
}
Индекс серии: