Когда пользователь переходит по ссылке, браузер автоматически добавляет к запросу заголовок
Referer — адрес страницы, с которой произошёл переход. Это стандартный механизм веба, и он уже встроен в HTTP. Никаких query string добавлять не нужно.
Как читать Referer на сервере
В ASP.NET Core заголовок доступен через
Request.Headers:app.MapGet("/page", (HttpContext ctx) =>
{
var referer = ctx.Request.Headers["Referer"].ToString();
if (string.IsNullOrEmpty(referer))
return Results.Ok("Прямой переход или Referer скрыт");
return Results.Ok($"Пришли с: {referer}");
});В контроллерах то же самое:
[HttpGet]
public IActionResult Index()
{
var referer = Request.Headers["Referer"].ToString();
// использование по необходимости
return View();
}
Как управлять тем, что браузер отправляет
За это отвечает заголовок
Referrer-Policy. Он задаётся на сервере и говорит браузеру, сколько информации об источнике передавать при переходах.Основные значения:
no-referrer — браузер не отправляет Referer вообще.origin — передаёт только домен без пути: https://example.com/ вместо https://example.com/some/page.strict-origin-when-cross-origin — полный URL при переходах в рамках одного домена, только origin при переходах на другой домен, ничего при переходе с HTTPS на HTTP. unsafe-url — всегда передаёт полный URL, включая path и query. Название говорит само за себя.Настройка в ASP.NET Core
Через middleware:
app.Use(async (ctx, next) =>
{
ctx.Response.Headers["Referrer-Policy"] = "strict-origin-when-cross-origin";
await next();
});
Или через
app.UseHsts() в связке с пакетом NWebsec.AspNetCore.Middleware:app.UseReferrerPolicy(opts => opts.StrictOriginWhenCrossOrigin());
Когда Referer может отсутствовать
Браузер не отправляет заголовок в нескольких случаях: прямой ввод URL, переход из локального файла, политика
no-referrer на стороне отправителя, переход с HTTPS на HTTP. 📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминатор