web-dev-qa-db-fra.com

Comment activer le téléchargement de fichiers volumineux en classique ASP on IIS 7?

Récemment, j'ai dû obtenir une ancienne application ASP fonctionnant dans IIS 7.5 sur un serveur W2K8. Presque tout fonctionne bien, sauf que je n'arrive pas à obtenir pour accepter des téléchargements supérieurs à ~ 200 Ko. J'ai trouvé un paramètre qui, d'après ce que je peux comprendre, doit faire l'affaire, dans applicationHost.config, j'ai défini la taille maximale de la demande à 100 Mo comme ceci:

<location path="TheNameOfMySite">
    <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="104857600" />
            </requestFiltering>
        </security>
    </system.webServer>
</location>

Malheureusement, cela semble ne rien faire du tout, il refuse toujours d'accepter les fichiers supérieurs à environ 200 Ko, et dans le fichier journal, il donne ce message d'erreur:

 ASP_0104 _: _ 80004005 | Operation_not_Allowed 

Googler qui pointe vers l'augmentation du maxAllowedContentLength comme je l'ai fait ci-dessus. Je suis donc à court d'idées, mais confiant que la foule intelligente de stackoverflow peut résoudre ce problème en moins de temps qu'il ne m'a fallu pour écrire cette question.

27
Johan Driessen

maxAllowedContentLength contrôle la quantité de données pouvant être envoyées dans une réponse. Cependant, vous souhaitez contrôler le montant pouvant être accepté dans une demande. Ceci est géré par l'attribut maxRequestEntityAllowed de l'élément limits dans la section asp du fichier de configuration. Un exemple pourrait ressembler à: -

<system.webServer>
  <asp>
     <cache diskTemplateCacheDirectory="%SystemDrive%\inetpub\temp\ASP Compiled Templates" />
     <limits scriptTimeout="00:02:00"
        queueConnectionTestTime="00:00:05"
        requestQueueMax="1000"
        maxRequestEntityAllowed="104857600"
        />
  </asp>

Vous pouvez configurer cela dans le gestionnaire IIS7 sous la catégorie "Propriétés de limite" dans la grille de propriétés pour la fonctionnalité ASP. Vous pouvez également utiliser une ligne de commande: -

appcmd set config /section:asp /limits.maxRequestEntityAllowed:104857600

Notez que l'extension de cette valeur augmente la fenêtre pour les attaques DOS où l'attaquant envoie un contenu volumineux au serveur, ne soyez donc pas tenté d'étendre cela au-delà de ce dont vous avez vraiment besoin.

33
AnthonyWJones

Sous Windows 2008 - Allez dans Outils d'administration - Gestionnaire de serveur - développez Rôles - développez Serveur Web - cliquez sur IIS - et recherchez l'instance Web, pour laquelle vous souhaitez modifier la limite de taille de fichier, puis allez dans l'option "ASP" développez "Propriétés de limite" et la propriété que vous devez modifier est "Limite maximale du corps de l'entité de demande". La taille du fichier est toujours en octets, utilisez donc n'importe quelle calculatrice en ligne pour calculer la conversion des octets en Ko ou Mo.

6
shoaib suleman

Tout d'abord @ AnthonyWJonesanswer a été très utile mais n'a pas résolu mon problème, en fait, il est légèrement inexact et c'est pourquoi j'écris ceci.

Importants téléchargements en IIS 6 était un jeu d'enfant dont vous aviez une valeur de configuration à vous soucier

AspMaxRequestEntityAllowed

La propriété AspMaxRequestEntityAllowed spécifie le nombre maximal d'octets autorisés dans le corps d'entité d'un ASP. Si un en-tête Content-Length est présent et spécifie une quantité de données supérieure à la valeur de AspMaxRequestEntityAllowed , IIS renvoie une réponse d'erreur 403. Cette propriété est liée en fonction à MaxRequestEntityAllowed, mais est spécifique à ASP. Alors que vous pouvez définir la propriété MaxRequestEntityAllowed sur 1 Mo sur le service de publication World Wide Web (WWW) Service), vous pouvez choisir de définir AspMaxRequestEntityAllowed sur une valeur inférieure, si vous savez que vos applications spécifiques ASP gérer une plus petite quantité de données.


Avec l'introduction de IIS 7 et son nouveau système de configuration basé sur XML hiérarchique qui utilise des fichiers * .config, tout est devenu un peu plus compliqué.

Il y a maintenant deux paramètres que vous devez configurer correctement avant que le téléchargement de fichiers volumineux ne fonctionne comme prévu et ils vivent tous les deux dans différentes zones de la configuration.

maxRequestEntityAllowed

 <configuration>
   <system.webServer>
     <asp>
       <limits maxRequestEntityAllowed="200000" />
     </asp>
   <system.webServer>
 <configuration>

L'attribut maxRequestEntityAllowed spécifie le nombre maximal d'octets autorisés dans le corps d'entité d'un ASP. Si un en-tête Content-Length est présent et spécifie une quantité de données supérieure à la valeur de maxRequestEntityAllowed , IIS renvoie une réponse d'erreur HTTP 403.

IMPORTANT: La configuration du paramètre ci-dessus fonctionnera jusqu'à un certain point, comme vous le verrez par défaut ci-dessous, mais une fois que vous atteignez ce paramètre par défaut, quel que soit maxRequestEntityAllowed est défini sur, le serveur répondra avec une réponse d'erreur HTTP 404 Not Found. Cela m'a dérouté au début parce que je pensais que ce devait être mon code qui renvoyait la réponse d'erreur 404.

maxAllowedContentLength

 <configuration>
   <system.webServer>
     <security>
       <requestFiltering>
         <requestLimits maxAllowedContentLength="30000000" />
       </requestFiltering>
     </security>
   </system.webServer>
 </configuration>

Spécifie la longueur maximale du contenu d'une demande, en octets. La valeur par défaut est 30000000, soit environ 28,6 Mo.

Ce paramètre est extrêmement important car il définit le nombre maximal d'octets dans une demande IIS (pas une demande ASP comme la valeur de configuration précédente) cela n'a rien à voir avec la longueur du contenu de la réponse (comme cela a déjà été dit). Indépendamment de ce que maxRequestEntityAllowed (qui est un paramètre spécifique asp-classic ) est défini sur, si maxAllowedContentLength n'est pas défini ou que vous essayez de télécharger plus que la valeur par défaut de 28 Mo (environ) vous obtiendra une réponse d'erreur HTTP 404.

Liens

4
Lankymart

pour ceux qui ne peuvent pas exécuter la commande appcmd à partir de CMD, vous devez modifier le chemin d'accès à C:\windows\system32\inetsrv car la commande réside dans ce dossier.

2
cybersans

La solution acceptée ici n'a pas fonctionné pour moi. Tout d'abord, il n'y avait pas l'élément spécifié dans ma configuration et je ne voulais pas bousiller un fichier de configuration.

J'ai également essayé @ shoaib-suleman'ssolution et cela n'a pas fonctionné non plus. Enfin, je suis tombé sur la solution présentée ici et cela a fonctionné.

  1. Ouvrez IIS 7 SnapIn

  2. Sélectionnez le site Web que vous souhaitez activer pour accepter les téléchargements de fichiers volumineux.

  3. Dans la fenêtre principale, double-cliquez sur "Demander le filtrage"

  4. Une fois la fenêtre ouverte, vous pouvez voir en haut une liste d'onglets par exemple: extensions de nom de fichier, règles, segments cachés et ainsi de suite ...

    Quel que soit l'onglet que vous sélectionnez, dans la fenêtre principale, cliquez avec le bouton droit pour afficher un menu contextuel contextuel. Sélectionnez "Modifier les paramètres des fonctionnalités" dans le menu.

  5. Sur le formulaire qui s'affiche, modifiez la "longueur de contenu maximale autorisée (octets)"

2
Jeff Reddy