TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.7K subscribers
Post #7055 2.77K
🧑‍💻 HTTP Referer в ASP.NET Core

Когда пользователь переходит по ссылке, браузер автоматически добавляет к запросу заголовок 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_люминатор
  • 👍 5
  • ❤ 2
More from @csharpproglib
  1. Sep 21, 2026⚙️ Настоящие атомарные операции Если Volatile решает проблему видимости, то Interlocked ре…
  2. Sep 20, 2026💪 Разминка перед трудовыми буднями Что произойдёт? ❤️ — список станет [1, 3] 🔥 — Invalid…
  3. Sep 19, 2026🧩 Middleware в ASP.NET Core: 3 ловушки Middleware — звено HTTP pipeline: app.Use(async (c…
  4. Sep 18, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
  5. Sep 17, 2026🦆 Duck typing в C# — почти как в TypeScript В TypeScript достаточно, чтобы у объекта был…
  6. Sep 17, 2026🧠 Почему .NET-под съедает всю память? kubectl top pod показывает 1 ГБ, а managed heap зан…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →