Суть единого входа и управления разрешениями: перенаправление HTTP

HTTP

Продолжайте знакомить с первой частью серии «Единый вход и управление разрешениями»: сущность единого входа и управления разрешениями. В этой статье рассказывается о перенаправлении 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";  
}  

Индекс серии:

  1. Общие сведения о сеансах и файлах cookie
  2. HTTP-перенаправление
  3. Введение в единый вход
  4. проблемы с безопасностью файлов cookie
  5. Введение в управление правами

情情说