IIS ne peut pas servir certaines extensions de fichiers

10

Je sers des fichiers .JSON, mais même si le fichier existe, IIS continue de générer une erreur 404 lors de l'accès à l'un des fichiers. J'ai essayé de renommer l'un des fichiers en .JS, et cela fonctionne.

Tout pointeur quel paramètre peut provoquer ce problème?

Adrian Godong
la source

Réponses:

21

Par défaut, IIS dans W2K3 et supérieur ne servira pas les fichiers qui ne sont pas d'un type MIME qu'il connaît (à la place, retournant 404 erreurs).

Vous devez ajouter un type MIME à IIS pour lui permettre de servir ce type de fichier. Vous pouvez le définir au niveau du site ou au niveau du serveur.

Pour définir cela pour l'ensemble du serveur:

  • Ouvrez les propriétés du serveur dans le Gestionnaire des services Internet et cliquez sur Types MIME
  • Cliquez sur "Nouveau". Entrez "JSON" pour l'extension et "application / json" pour le type MIME.
Evan Anderson
la source
J'ajoute un nouveau type MIME, redémarre le site Web, mais toujours 404. Merci quand même, je pense que cela peut être l'un des problèmes.
Adrian Godong
Hmm. Vérifiez ce que vous avez changé. Le symptôme «renommé le fichier et cela a fonctionné» est l' indicateur classique de ce comportement.
Evan Anderson
Triple l'a vérifié. Je suppose que vous n'avez pas besoin de redémarrer l'ensemble du serveur, non?
Adrian Godong
Hmm ... Je me bats pour te dire quoi faire, alors. Je viens de le faire moi-même dans une machine virtuelle propre de Windows Server 2003 SP2. J'ai installé IIS, créé un fichier "foo.json" dans "C: \ inetpub \ wwwroot", vérifié que j'avais obtenu un 404 lorsque je cliquais sur " localhost / foo.json " dans un navigateur, ajouté le type MIME pour ".JSON "/" application / json "sur le site, puis je suis allé dans ma fenêtre IE encore ouverte et j'ai appuyé sur F5 et j'ai vu la page se charger. Je pense que vous avez aussi autre chose en jeu.
Evan Anderson
1
Je devais également m'assurer que les extensions de service Web étaient activées pour que cela fonctionne pour moi ...
gandalf
3

J'ai eu le même problème. IIS effectue un filtrage de type MIME. S'il ne connaît pas le type MIME d'une extension de fichier spécifique, il renvoie une erreur 404.

Sur IIS <7: ouvrez les propriétés du site (ou du serveur). Cliquez sur l' onglet HTTP-Header . Cliquez sur le bouton Types MIME . Ajoutez le type de fichier * avec le type MIME "application / octet-stream".

Pour IIS 7: Ouvrez le gestionnaire IIS. Cliquez sur le serveur ou le site Web. Double-cliquez sur l' icône de la fonction Types MIME . Dans le volet Actions, cliquez sur Ajouter . Remplissez la zone "Extension de nom de fichier" avec * et la zone Type MIME avec "application / octet-stream".

Eric Falsken
la source
2

J'ai ajouté le type MIME .json- text/jsonau site dans IIS pour afficher dans le navigateur sous forme de texte.

neildeadman
la source
CETTE! CETTE! Cette!
Tschallacka
1

Pour regrouper les réponses en une réponse plus générale:

Voici la mise en garde:

  • À moins qu'un gestionnaire de script (moteur de contenu actif, par exemple, ASP / ASPX / PHP / Java / ISAPI / etc) ne leur soit associé
    • cela signifie que IIS les traite comme du contenu actif , et non comme des fichiers statiques
  • Les fichiers de contenu actifs servis par n'importe quelle extension doivent avoir cette extension autorisée dans la liste de restriction des extensions de service Web (alias restrictions ISAPI / CGI dans IIS 7)
    • si vous obtenez un 404 sur un type de contenu actif dans IIS 7, cela peut également signifier que votre gestionnaire n'est pas installé - vous devez donc réellement installer le composant qui prend en charge cette extension de fichier (par exemple, si les fichiers .aspx génèrent un 404, vous n'avez probablement pas ASP.Net installé)

Si vous rencontrez ce type de problème, ouvrez les fichiers journaux Web du site Web et consultez le code de sous-état (par exemple, 404 3) pour déterminer exactement pourquoi votre site Web ne sert pas de contenu pour IIS 6, ou

  • utiliser le suivi des demandes ayant échoué
  • (ou tout simplement les erreurs détaillées sur la console locale)

dans IIS 7.

TristanK
la source
Cette "mise en garde" n'a pas de sens: "... cela signifie que IIS les traite comme du contenu actif, pas des fichiers statiques" Web.config déclare les fichiers json comme statiques: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </staticContent>
"IIS ne servira pas les fichiers statiques qui ne sont pas associés à un type MIME à moins qu'un gestionnaire de script ne leur soit associé" fonctionne toujours comme (IMO) une véritable déclaration. Dans le cas d'une personne incapable de les servir, il semble que la leur ne figure nulle part dans leurs fichiers de configuration. Peut-être que votre copie de Windows est plus récente que la leur?
TristanK
1

J'ai également eu ce problème - et le problème s'est avéré être des autorisations de fichier sur le dossier où le fichier json était stocké. J'ai répondu à une question similaire ici .

Ces gens ont tous raison de dire que vous devez ajouter le type MIME.

Le type MIME active l'extension de fichier sur le serveur et le gestionnaire de mappage indique à IIS ce qu'il faut en faire.

Vous devez donc également ajouter le gestionnaire de mappage , et pour cela, vous devez installer la fonctionnalité Windows appelée Classic Asp afin de gérer le mappage.

Voici comment ajouter le gestionnaire de mappage:

  1. Ouvrez IIS7 Manager
  2. Accédez aux propriétés du serveur IIS (ou simplement du site, si vous ne voulez pas de paramètre global)
  3. Cliquer sur Handler Mappings
  4. Cliquer sur Add a Script Map
  5. Entrez les propriétés:
    • Chemin de demande: *.json
    • Exécutable: C:\WINDOWS\system32\inetsrv\asp.dll
    • Nom: JSON(vous pouvez l'appeler comme vous voulez)
  6. Cliquez sur OK et vous avez terminé. Il devrait commencer à fonctionner et vous n'avez pas besoin d'une réinitialisation IIS.

En outre, certaines personnes vous diront d'utiliser `application / x-javascript » que l'application de type mime, mais JSON est pas javascript, en soi (il est un sous - ensemble, cependant) et il devrait donc être « application / json » au lieu , car il s'agit du type de média enregistré par l'IANA pour JSON.

bgmCoder
la source
0

Vérifiez également le filtrage des demandes dans IIS. Si ".json" est là et bloqué, rien d'autre ne fonctionnera.

entrez la description de l'image ici

Glen Little
la source