Skip to main content

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

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:

(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.

(altro…)

 

PHP – Come eliminare i caratteri non validi da un file o stringa XML in formato UTF-8

Ieri ho scritto due righe su un metodo PHP per eliminare l’header e il footer di un file XML.P7M firmato elettronicamente (a patto che sia in formato CAdES): piuttosto brutto a vedersi, poco ma sicuro, ma se non altro faceva e fa il suo lavoro.

Oggi verserò un altro tributo alle funzioni “brutte ma (almeno) funzionanti” pubblicando anche la funzione che ho sviluppato a corredo della precedente per ripulire il contenuto del suddetto file da caratteri non validi, così da poter utilizzare la stringa risultante come parametro per la creazione di di un oggetto SimpleXML:

(altro…)

 

PHP – Come estrarre il contenuto XML da un file XML.P7M (CAdES, Fattura PA)

Qualche giorno fa mi è stato chiesto di preparare un paio di pagine PHP per estrarre il contenuto di una serie di file XML relativi a fatture elettroniche per la Pubblica Amministrazione, realizzati cioè seguendo il formato definito dall’Agenzia delle Entrate e noto con il nome di Fattura PA. Si trattava di un lavoro semplice, nel corso del quale mi sono trovato a dover risolvere molto rapidamente – per ragioni legate ai tempi di consegna – due problemi non banali: estrarre il contenuto XML da una serie di file .xml.p7m firmati digitalmente ed eliminare dal contenuto i caratteri non UTF8 nel contenuto XML.

Dovendo concludere lo sviluppo rapidamente ho deciso di risolvere entrambe le problematiche allineandomi a uno dei più famosi luoghi comuni che, non senza un fondo di verità, accompagnano da sempre le caratteristiche del linguaggio PHP: il fatto che si tratta di un “double clawed hammer”, ovvero di un martello a due penne (e nessuna testa). In questo articolo ci occuperemo del primo argomento, rimandando il secondo a tempi migliori (UPDATE: alla fine l’ho scritto! Se vi interessa leggerlo, fate click qui).

Immagine di un lavoro originale realizzato da Ian Baker. Altre foto di questa meravigliosa opera sono disponibili sulla sua pagina Flickr: https://www.flickr.com/photos/raindrift/sets/72157629492908038

Per quanto riguarda l’estrazione XML dal P7M ho approfittato del fatto che tutte le fatture erano state firmate digitalmente utilizzando il formato CAdES, il quale – come forse già sapete – prevede l’aggiunta al file originale di un header PKCS#7 in testa e di una signature info in coda, lasciando il contenuto in mezzo intalterato. Questo consente di rimuovere entrambi, a patto di riuscire a localizzare l’esatta posizione del contenuto che si desidera preservare. Nel caso di un file XML questo è fortunatamente piuttosto semplice. E’ importante sottolineare come procedere in questo modo non ci dà nessuna garanzia sulla bontà della firma digitale stessa, che viene scartata senza alcuna verifica. Nel caso specifico, trattandosi di documenti già verificati alla fonte e archiviati digitalmente a monte del mio visualizzatore, io ho potuto farne a meno senza problemi. Al tempo stesso, suggerisco di prestare la massima attenzione al proprio ambito di uso: se avete bisogno di verificare l’autore del file è senz’altro opportuno utilizzare un metodo diverso che tenga in considerazione la firma del mittente.

(altro…)

 

Come effettuare URLEncode di una stringa in formato UTF8 con Visual Basic 6

Visual Basic 6 (VB6) al giorno d’oggi è diventato quasi una creatura mitologica: non importa quanto tu possa cercare di eliminarlo dal proprio arsenale di strumenti di sviluppo, prima o poi torna sempre a perseguitarti, nella maggior parte dei casi sotto le sembianze di un vecchio software gestionale e/o di utilità varia che svolge un numero di funzioni magari estremamente limitato, ma comunque rilevante nell’economia aziendale. Quando questo software smette di funzionare, si rende ahimé necessario riesumare l’ambiente di sviluppo e correggere il problema.

Oggi in ufficio ci è toccato assistere a questa ennesima resurrezione, che ha riguardato un vecchio client software che ancora viene utilizzato – tra le altre cose – per svolgere alcune saltuarie request HTTP a servizi esterni parimenti obsoleti. Nello specifico, il problema era legato a una vecchia funzione  URLEncode nascosta da qualche parte del codice sorgente:

(altro…)

 

Come ottenere il Content-Type / MIME Type dall’estensione di un file in ASP.NET C#

Come posso recuperare il MIME Type di un determinato file in C#? Si tratta di una domanda molto frequente tra sviluppatori e che mi capita di sentire spesso da amici e colleghi che lavorano sul framework ASP.NET per realizzare applicazioni MVC, Web API e (ultimamente) .NET Core. Il motivo è semplice: se si lavora di frequente con filesystem e database prima o poi arriva sempre la necessità di recuperare il MIME type di un file, ad esempio al momento di inviarlo al browser dell’utente al termine di una request. In tutti i casi in cui il MIME Type non è stato memorizzato in precedenza, non possiamo fare altro che recuperarlo basandoci sull’estensione del file in questione, che nella maggior parte dei casi fornisce un indizio inequivocabile per identificare la tipologia di file da inviare: abbiamo quindi bisogno di effettuare un mapping tra le varie possibili estensioni che possono avere i nostri file e il MIME Type corrispondente a ciascuna di esse.

Esistono numerose tecniche che consentono di svolgere questa operazione in modo più o meno efficiente. Per ragioni di semplicità ci limiteremo ad approfondirne due: recuperare le informazioni contenute dal Registro di sistema (Windows Registry) o utilizzare a tale scopo una lista statica di tipi MIME (MIME Type Map). Non prenderemo in considerazione tecniche che prevedono di effettuare delle interrogazioni a servizi esterni, in quanto riteniamo che un simile approccio sarebbe assolutamente inefficiente per questo tipo di necessità.

(altro…)