Podstawy buforowania odpowiedzi
Buforuj odpowiedzi, aby ograniczyć obciążenie.
Podstawy buforowania odpowiedzi to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Czym jest buforowanie wyników?
Buforowanie wyników przechowuje pełną odpowiedź HTTP endpointu, dzięki czemu na powtarzające się żądania można odpowiadać z pamięci podręcznej bez ponownego uruchamiania procedury obsługi. Znacznie zmniejsza to opóźnienia i obciążenie w przypadku endpointów, do których wysyła się głównie żądania odczytu.
// First call -> handler runs, response stored
// Next calls -> response served from cacheBuforowanie wyników a buforowanie odpowiedzi
Wbudowane buforowanie wyników (dodane w .NET 7) przechowuje odpowiedzi na serwerze, a pełną kontrolę nad nim ma aplikacja. Starsze buforowanie odpowiedzi jedynie emituje nagłówki pamięci podręcznej HTTP i polega na tym, że klient lub serwery proxy je respektują.
// Output caching: server-side store you control
// Response caching: just Cache-Control headersAddOutputCache
Usługę należy zarejestrować za pomocą AddOutputCache.
builder.Services.AddOutputCache();UseOutputCache
Oprogramowanie pośredniczące należy dodać do potoku za pomocą UseOutputCache. Powinno ono znajdować się za routingiem, a jeśli jest używany mechanizm CORS — również za nim.
var app = builder.Build();
app.UseOutputCache();
app.MapControllers();CacheOutput na endpointzie
Włącz buforowanie dla endpointu za pomocą CacheOutput (minimal API) lub atrybutu [OutputCache] (kontrolery).
app.MapGet("/products", GetProducts)
.CacheOutput();
// Controller:
// [OutputCache]
// public IActionResult Get() => Ok(...);Ustawianie czasu wygaśnięcia
Kontroluj, jak długo odpowiedź pozostaje w cache, za pomocą Expire.
app.MapGet("/products", GetProducts)
.CacheOutput(policy => policy.Expire(TimeSpan.FromSeconds(30)));Co jest buforowane
Domyślnie buforowane są tylko żądania GET i HEAD ze statusem 200 i tylko wtedy, gdy nie występuje Set-Cookie ani autoryzacja - przypadkowe buforowanie uwierzytelnionych odpowiedzi zależnych od użytkownika jest niebezpieczne.
// Cached by default: GET/HEAD, 200, no cookies/authRóżnicowanie według parametrów zapytania
Dwa żądania do tej samej ścieżki, ale z różnymi ciągami zapytania, zwykle powinny być buforowane osobno. Użyj SetVaryByQuery.
app.MapGet("/search", Search)
.CacheOutput(policy => policy
.Expire(TimeSpan.FromSeconds(60))
.SetVaryByQuery("q", "page"));Różnicowanie według nagłówka
Klucz cache można różnicować na podstawie nagłówków - na przykład, aby udostępniać inną buforowaną kopię dla każdej wartości Accept-Language.
policy.SetVaryByHeader("Accept-Language");Bazowa polityka dla wszystkich endpointów
AddBasePolicy stosuje ustawienia domyślne do każdego endpointu, które poszczególne endpointy nadal mogą nadpisać.
builder.Services.AddOutputCache(options =>
{
options.AddBasePolicy(policy =>
policy.Expire(TimeSpan.FromSeconds(10)));
});Wyłączanie buforowania dla endpointu
Jeśli bazowa polityka buforuje wszystko, wyklucz dynamiczne endpointy za pomocą NoCache.
app.MapGet("/cart", GetCart)
.CacheOutput(policy => policy.NoCache());Szybki test
Proszę potwierdzić różnicę między tymi dwiema funkcjami buforowania.
Podsumowanie
Poznali Państwo podstawy buforowania odpowiedzi:
AddOutputCache+UseOutputCachewłączają buforowanie po stronie serwera.CacheOutput/[OutputCache]włączają endpointy do buforowania;Expireustawia czas trwania.- Domyślnie buforowane są tylko odpowiedzi GET/HEAD ze statusem 200, bez autoryzacji i ciasteczek.
SetVaryByQueryiSetVaryByHeaderokreślają klucz cache.
Następnie: polityki cache i unieważnianie.
Często zadawane pytania
Czy lekcja „Podstawy buforowania odpowiedzi” jest bezpłatna?
Tak — pełny tekst „Podstawy buforowania odpowiedzi” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podstawy buforowania odpowiedzi”?
Buforuj odpowiedzi, aby ograniczyć obciążenie. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Podstawy buforowania odpowiedzi”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Algorytmy ograniczania przepustowości
- Konfigurowanie oprogramowania pośredniczącego ograniczania przepustowości
- Podstawy buforowania odpowiedzi
- Zasady buforowania i unieważnianie