Вы не можете отправить данные обратно с запросом на перенаправление, поэтому здесь есть 2 предложенных варианта.
Навигация на стороне клиента
Один из вариантов - отправить нормальный ответ с сообщениемВы хотите показать пользователю, при желании с URL-адресом, чтобы перейти к.После этого клиент может выполнять навигацию.
Это может быть запрос AJAX, и клиентский JavaScript может обрабатывать результат и воздействовать на него: отображать сообщение и перемещаться.Вот несколько способов навигации по JavaScript на стороне клиента:
window.location = "http://new-website.com";
window.location.href = "http://new-website.com";
window.location.assign("http://new-website.com");
window.location.replace("http://new-website.com");
Кодирование сообщения в URL-адресе в качестве параметра
Другой распространенный способ - отправка перенаправления и кодирование сообщения в новом URL-адресе в видепараметр запроса, например:
newPath := "/?msg=Hello"
Это простой пример, но если сообщение является более сложным, вам нужно экранировать его, чтобы получить правильный путь.Для этого вы можете использовать url.QueryEscape()
следующим образом:
msg := "Email didn't send"
path := "/?msg=" + url.QueryEscape(msg)
Это приведет к пути /?msg=Email+didn%27t+send
(попробуйте на Go Playground ),Другой вариант - использовать url.URL
и url.Values
для сборки URL, например:
values := url.Values{}
values.Add("msg", "Email didn't send")
url := &url.URL{
Path: "/",
RawQuery: values.Encode(),
}
fmt.Println(url)
Приведенные выше распечатки (попробуйте на Go Playground ):
/?msg=Email+didn%27t+send
Конечно, новая страница должна обрабатывать этот параметр запроса, например, использовать JavaScript, чтобы определить, существует ли в этом случае параметр запроса msg
, и еслипоэтому, покажите его как-нибудь пользователю.
Также обратите внимание, что вы не должны использовать код StatusMovedPermanently
для этого перенаправления, так как это может кэшироваться браузерами и прокси.Вместо этого используйте StatusFound
.Этот код состояния указывает клиентам, что перенаправление является временным и может измениться в будущем, поэтому, если клиенту снова потребуется исходный URL-адрес, он снова запросит исходный (а не новый) автоматически.