ASP.NET e IIS - Errore (413) Request Entity Too Large e Maximum Request Length Exceeded - Come risolvere Come risolvere l'errore HTTP Error 413.1 - Request Entity Too Large in una applicazione ASP.NET su Web Server IIS

IIS URL Rewrite: redirect di più nomi di dominio su un singolo hostname

Se vi siete imbattuti in questo articolo è probabile che stiate cercando di configurare la vostra applicazione ASP.NET (Core, MVC, Web API, Windows Forms, WCF o altro) su un web server IIS il quale, a differenza del web server di sviluppo, si rifiuta di accettare l'upload di un file di dimensioni superiori a 16kb, restituendo uno dei seguenti errori:

HTTP Error 413.1 - Request Entity Too Large

(413) Request Entity Too Large

Entità richiesta troppo grande

Maximum request length exceeded

Superata la lunghezza massima della richiesta

Tutti questi errori sono relativi al superamento delle dimensioni massime di un allegato - o meglio, della Request HTTP inviata al server - previste dalla nostra applicazione ASP.NET per impostazione predefinita. Queste limitazioni sono state inserite per una valida ragione: la ricezione di un file è una operazione piuttosto pesante per il server, in quanto impegna a tempo indeterminato un working thread. Per questo motivo, le impostazioni predefinite della maggior parte delle applicazioni ASP.NET prevedono una dimensione generalmente compresa tra i 16k e i 64k, sufficiente per l'invio/ricezione di form di testo ma logicamente del tutto inadeguate quando si ha l'esigenza di gestire l'upload di uno o più file.

Fortunatamente risolvere il problema è molto semplice: tutto quello che dobbiamo fare è modificare alcune sezioni presenti nel file Web.Config dell'applicazione per ampliare i limiti in bytes normalmente previsti per questo tipo di operazione. Poiché queste impostazioni variano a seconda delle versioni di IIS, abbiamo inserito tutte le versioni per le quali è necessario aggiungere (o modificare) i valori indicati.

MaxRequestLength

Questo valore imposta il limite massimo di lunghezza di ciascuna Request a un massimo di 1073741824 bytes.

Per tutte le versioni di IIS

Per IIS 7 o versioni superiori

In aggiunta al precedente:

HttpBindings

Se la vostra applicazione è un web service realizzato con ASP.NET  WFC (SOAP) o Web API/MVC (REST), è inoltre necessario aggiungere i seguenti attributi ai binding che intendete utilizzare. Il modo migliore di procedere è aprire il Web.Config relativo all'applicazione e, in corrispondenza di ciascuno di essi, aggiungere i seguenti parametri evidenziati:

L'esempio di cui sopra ha lo scopo di incrementare la dimensione massima di un qualsiasi upload fino a 2147483647 bytes per tutte le connessioni di tipo basicHttpBinding: a seconda delle caratteristiche del vostro web service e dei protocolli utilizzati potrebbe essere necessario aggiungere gli attributi sopra indicati anche agli altri binding presenti, previsti e/o supportati: webHttpBinding, wsHttpBindingcustomBinding e così via.

Nel caso in cui questa aggiunta non fosse sufficiente a risolvere il problema, potrebbe essere necessario modificare anche l'attributo transferModeimpostandolo a Streamed (l'impostazione predefinita è Buffered), e rivedere al rialzo anche le impostazioni relative alle readerQuotas, ovvero le limitazioni che il server impone ai client SOAP che effettuano la connessione:

uploadReadAheadSize

Nel caso in cui tutte le operazioni descritte in precedenza non fossero sufficienti a risolvere il problema, non resta che provare a intervenire modificando il valore della proprietà uploadReadAheadSize: sfortunatamente, questa impostazione non può essere modificata a livello di web.config ma va definita direttamente sulla macchina che ospita il Web Server IIS di pubblicazione.

La necessità di modificare questa impostazione è particolarmente frequente quando si lavora con Windows Communication Foundation (WFC), il "moderno" metodo di gestione dei Web Service SOAP di cui abbiamo avuto già occasione di parlare in questo articolo, dove il problema generalmente si verifica in conseguenza di qualsiasi upload avente dimensioni superiori a 42-49kb.

Collegatevi dunque con Remote Desktop al PC in questione, quindi aprite un Prompt dei Comandi con privilegi di amministratore e digitate il seguente comando, avendo cura di sostituire a YOUR_WEBSITE_NAME il nome del sito web così come lo avete definito su IIS Manager al momento della creazione:

Nel caso in cui vogliate operare in modo più generale, potete cambiare l'impostazione predefinita per tutti i siti web con il seguente comando PowerShell:

Se preferite utilizzare la GUI, potete configurare queste impostazioni anche tramite il pannello Editor di Configurazione (Configuration Editor) all'interno dello strumento Gestione Internet Information Services (IISManager):

ASP.NET e IIS - Errore (413) Request Entity Too Large e Maximum Request Length Exceeded - Come risolvere

Una volta lì, selezionate la sezione system.webServer/serverRuntime nella casella a sinistra, quindi modificate il valore dell'attributo uploadReadAheadSize di conseguenza:

ASP.NET e IIS - Errore (413) Request Entity Too Large e Maximum Request Length Exceeded - Come risolvere

IMPORTANTE: Assicuratevi che l'attributo enabled sia correttamente impostato a True, altrimenti l'intera sezione non sarà presa in considerazione e IIS utilizzerà le limitazioni predefinite, bloccando gli upload con dimensioni superiori a 42-49kb.

Per il momento è tutto: felice upload!

 

 

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.