Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il middleware di compressione della risposta ora aggiunge Vary: Accept-Encoding a ogni risposta che lo attraversa, incluse le risposte per le quali in realtà non comprime il corpo della risposta. Le cache downstream visualizzano chiavi della cache più corrette, a costo di varianti di cache leggermente maggiori quando le cache non normalizzano l'intestazione della Accept-Encoding richiesta.
Versione introdotta
.NET 11
Comportamento precedente
In precedenza, il middleware di compressione delle risposte accodò Vary: Accept-Encoding solo alle risposte effettivamente compresse. Risposte per cui la compressione è stata ignorata, ad esempio perché il tipo di contenuto non era in MimeTypeso perché la codifica preferita identity dal client, è stata inviata senza l'intestazione Vary aggiunta dal middleware.
Una cache downstream potrebbe quindi servire a un client che accetta solo identity una risposta compressa archiviata per Accept-Encoding: gzip (e viceversa), a meno che la cache o l'origine non abbiano già aggiunto l'intestazione in altro modo.
Nuovo comportamento
A partire da ASP.NET Core 11, il middleware di compressione della risposta aggiunge Vary: Accept-Encoding alla raccolta di intestazioni di risposta per ogni risposta che vede, indipendentemente dal fatto che il corpo sia compresso o meno. Se l'intestazione contiene Accept-Encodinggià , il middleware non aggiunge un token duplicato.
Tipo di cambiamento che interrompe la compatibilità
Questa modifica è una modifica funzionale.
Motivo della modifica
Senza l'intestazione Vary: Accept-Encoding in ogni risposta, una cache condivisa può servire una risposta codificata archiviata a un client che non accetta tale codifica. L'aggiunta incondizionata dell'intestazione rende la risposta del middleware correttamente memorizzabile nella cache dagli intermediari conformi a HTTP. Per altre informazioni, vedere dotnet/aspnetcore#55092 e il problema risolto, dotnet/aspnetcore#48008.
Azione consigliata
Non è necessaria alcuna modifica al testo di origine. Verificare che qualsiasi cache downstream (rete CDN, proxy inverso, cache del browser) normalizzi l'intestazione della Accept-Encoding richiesta in modo che non archivii un numero inutilmente elevato di varianti. La maggior parte delle reti CDN moderne esegue già questa operazione.
Se non si vuole che il middleware aggiunga l'intestazione a una risposta specifica, rimuoverla dopo l'esecuzione del middleware:
app.UseResponseCompression();
app.Use(async (context, next) =>
{
context.Response.OnStarting(() =>
{
// Remove the Vary header added by UseResponseCompression for a specific path.
if (context.Request.Path.StartsWithSegments("/no-vary"))
{
context.Response.Headers.Remove("Vary");
}
return Task.CompletedTask;
});
await next();
});