2011-02-04 21 views
6

Mi piacerebbe capire cosa succede sotto il cofano quando si carica un web.Come funziona il caricamento di file HTTP internamente in IIS?

Credo che uno di questi:

  1. Il file viene caricato in memoria dal browser, inviato al buffer di memoria del server web, e quindi l'applicazione viene notificato per raccoglierlo.
  2. Il file viene letto dal browser e allo stesso tempo inviato al server Web, che può iniziare a salvare i byte in modo progressivo.

Ho provato a caricare un file molto grande e ho inserito un punto di interruzione sulla prima riga del metodo che ha ricevuto il caricamento. Ho visto come il browser utilizzava molto tempo per caricare ... ma il punto di interruzione non è stato ancora raggiunto, e dopo un po 'il punto di interruzione è stato raggiunto.

Voglio capire questo, perché nella peggiore delle ipotesi, se permetto grandi upload, potrebbero far esplodere la memoria del server ad un certo punto.

Cosa succede se carico un file da 2 GB? (considerando che il web server/app accetta quella lunghezza) richiederebbe 2 GB di memoria del server?

Cheers.

+2

Sarei molto sorpreso se non lo trasmettesse in streaming in un file temporaneo una volta superata una certa dimensione, indipendentemente da quando il consumatore viene informato, ma non ho un riferimento per questo. – Rup

+0

giusto, avrebbe perfettamente senso. Probabilmente dovrei chiederlo nei forum IIS/Apache perché forse è una domanda molto specifica. – vtortola

+1

Oh, ci sono tutti i tipi qui - mi aspetto che qualcuno lo saprà :-) – Rup

risposta

4

La documentazione per la classe HttpPostedFile (che rappresenta un file caricato sul server in ASP.NET) specifica:

file vengono caricati in MIME formato multipart/form-data. Per impostazione predefinita , tutte le richieste, inclusi i campi e i file caricati, maggiori di 256 KB vengono memorizzati su disco, ovvero di quelli conservati nella memoria del server.

+0

Grazie. Non ho nemmeno pensato a guardare lì! :) – vtortola