Функция http.Redirect

Функция http.Redirect выполняет перенаправление клиента на новый URL-адрес. Она отправляет HTTP-ответ с указанным кодом статуса и заголовком Location, содержащим новый адрес. Первым параметром функция принимает http.ResponseWriter для записи ответа, вторым - указатель на http.Request для получения информации о текущем запросе, третьим - строку с URL-адресом для перенаправления, и четвертым - целочисленный код статуса HTTP-редиректа.

Синтаксис

gohttp.Redirect(w http.ResponseWriter, r *http.Request, url string, code int)

Пример

Давайте выполним простое перенаправление с кодом 301:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/old", func(w http.ResponseWriter, r *http.Request) {
    http.Redirect(w, r, "/new", http.StatusMovedPermanently)
  })

  http.HandleFunc("/new", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "New page")
  })

  http.ListenAndServe(":8080", nil)
}

При обращении к /old клиент будет перенаправлен на /new с кодом 301 Moved Permanently.

Пример

Давайте выполним временное перенаправление с кодом 302:

gopackage main

import (
  "net/http"
)

func main() {
  http.HandleFunc("/temp", func(w http.ResponseWriter, r *http.Request) {
    http.Redirect(w, r, "https://example.com", http.StatusFound)
  })

  http.ListenAndServe(":8080", nil)
}

В этом примере запрос на /temp будет перенаправлен на внешний сайт с кодом 302 Found.

Пример

Давайте перенаправим пользователя после обработки формы:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/submit", func(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
      // Обработка данных формы
      http.Redirect(w, r, "/success", http.StatusSeeOther)
      return
    }
    fmt.Fprintln(w, "Submit form")
  })

  http.HandleFunc("/success", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Form submitted successfully")
  })

  http.ListenAndServe(":8080", nil)
}

При POST-запросе на /submit сервер перенаправит пользователя на /success с кодом 303 See Other.

Смотрите также

  • функцию http.Error,
    которая отправляет HTTP-ошибку с указанным статусом
  • функцию http.ServeFile,
    которая отдает файл как HTTP-ответ
  • функцию http.NotFound,
    которая отправляет HTTP-ответ с кодом 404
  • структуру http.ServeMux,
    которая используется для маршрутизации HTTP-запросов