IIS kann bestimmte Dateierweiterungen nicht bereitstellen

10

Ich stelle JSON-Dateien bereit, aber obwohl die Datei vorhanden ist, gibt IIS immer wieder 404-Fehler aus, wenn auf eine der Dateien zugegriffen wird. Ich habe versucht, eine der Dateien in .JS umzubenennen, und es funktioniert.

Gibt es einen Hinweis darauf, welche Einstellung dieses Problem verursachen kann?

Adrian Godong
quelle

Antworten:

21

Standardmäßig werden in IIS in W2K3 und höher keine Dateien bereitgestellt, die keinen bekannten MIME-Typ haben (stattdessen werden 404-Fehler zurückgegeben).

Sie müssen IIS einen MIME-Typ hinzufügen, damit dieser Dateityp bereitgestellt werden kann. Sie können es auf Site- oder Serverebene festlegen.

So stellen Sie dies für den gesamten Server ein:

  • Öffnen Sie die Eigenschaften für den Server im IIS-Manager und klicken Sie auf MIME-Typen
  • Klicken Sie auf "Neu". Geben Sie "JSON" für die Erweiterung und "application / json" für den MIME-Typ ein.
Evan Anderson
quelle
Ich füge einen neuen MIME-Typ hinzu, starte die Website neu, aber immer noch 404. Trotzdem danke, ich denke, dies könnte eines der Probleme sein.
Adrian Godong
Hmm. Überprüfen Sie noch einmal, was Sie geändert haben. Das Symptom "Datei umbenannt und funktioniert" ist der klassische Indikator für dieses Verhalten.
Evan Anderson
Triple hat es überprüft. Ich gehe davon aus, dass Sie nicht den gesamten Server neu starten müssen, oder?
Adrian Godong
Hmm ... Ich habe Mühe, Ihnen zu sagen, was Sie dann tun sollen. Ich habe es gerade selbst in einer sauberen VM von Windows Server 2003 SP2 gemacht. Ich habe IIS installiert, eine "foo.json" -Datei in "C: \ inetpub \ wwwroot" erstellt, überprüft, dass ich eine 404 erhalten habe, als ich in einem Browser auf " localhost / foo.json " geklickt habe , und den MIME-Typ für ".JSON" hinzugefügt "/" application / json "auf die Site, ging dann zu meinem noch geöffneten IE-Fenster und drückte F5 und sah das Laden der Seite. Ich denke, du hast noch etwas anderes im Spiel.
Evan Anderson
1
Ich musste auch sicherstellen, dass Web Service Extensions aktiviert waren, damit dies für mich funktioniert ...
gandalf
3

Ich hatte das gleiche Problem. IIS führt eine sogenannte MIME-Typfilterung durch. Wenn der MIME-Typ einer bestimmten Dateierweiterung nicht bekannt ist, wird ein 404-Fehler zurückgegeben.

Unter IIS <7: Öffnen Sie die Site- (oder Server-) Eigenschaften. Klicken Sie auf die Registerkarte HTTP-Header . Klicken Sie auf die Schaltfläche MIME-Typen . Fügen Sie den Dateityp * mit dem MIME-Typ "application / octet-stream" hinzu.

Für IIS 7: Öffnen Sie den IIS-Manager. Klicken Sie auf den Server oder die Website. Doppelklicken Sie auf das Funktionssymbol MIME-Typen . Klicken Sie im Bereich Aktionen auf Hinzufügen . Füllen Sie das Feld "Dateinamenerweiterung" mit * und das Feld MIME-Typ mit "application / octet-stream".

Eric Falsken
quelle
2

Ich fügte hinzu , MIME - Typen .json- text/jsonauf die Website in IIS im Browser als Text.

Neildeadman
quelle
DIESE! DIESE! Diese!
Tschallacka
1

So fassen Sie die Antworten zu einer allgemeineren Antwort zusammen:

Hier kommt die Einschränkung:

  • Es sei denn, ihnen ist ein Skript-Handler (Active Content Engine, z. B. ASP / ASPX / PHP / Java / ISAPI / usw.) zugeordnet
    • Dies bedeutet, dass IIS sie als aktiven Inhalt behandelt , nicht als statische Dateien
  • Für aktive Inhaltsdateien, die von einer Erweiterung bereitgestellt werden, muss diese Erweiterung in der Einschränkungsliste für Webdiensterweiterungen zulässig sein (auch bekannt als ISAPI / CGI-Einschränkungen in IIS 7).
    • Wenn Sie in IIS 7 eine 404 für einen aktiven Inhaltstyp erhalten, bedeutet dies möglicherweise auch, dass Ihr Handler nicht installiert ist. Sie müssen also die Komponente installieren, die diese Dateierweiterung unterstützt (z. B. wenn ASPX-Dateien eine generieren 404 haben Sie wahrscheinlich kein ASP.Net installiert)

Wenn bei Ihnen ein solches Problem auftritt, öffnen Sie die Weblogdateien der Website und überprüfen Sie anhand des Substatuscodes (z. B. 404 3), warum Ihre Website keine Inhalte für IIS 6 oder IIS 6 bereitstellt

  • Verwenden Sie die Ablaufverfolgung fehlgeschlagener Anforderungen
  • (oder nur die detaillierten Fehler auf der lokalen Konsole)

in IIS 7.

TristanK
quelle
Diese "Einschränkung" macht keinen Sinn: "... dies bedeutet, dass IIS sie als aktiven Inhalt und nicht als statische Dateien behandelt." Web.config deklariert JSON-Dateien als statisch: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </ staticContent>
"IIS stellt keine statischen Dateien bereit, denen kein MIME-Typ zugeordnet ist, es sei denn, ihnen ist ein Skript-Handler zugeordnet" funktioniert weiterhin als (IMO) eine echte Anweisung. Für den Fall, dass jemand nicht in der Lage ist, sie zu bedienen, scheint es, dass er diese Definition nirgendwo in seinen Konfigurationsdateien hat. Vielleicht ist Ihre Windows-Kopie aktueller als ihre?
TristanK
1

Ich hatte auch dieses Problem - und das Problem stellte sich als Dateiberechtigung für den Ordner heraus, in dem die JSON-Datei gespeichert war. Ich habe hier eine ähnliche Frage beantwortet .

Diese Leute sagen alle zu Recht, dass Sie den MIME-Typ hinzufügen müssen.

Der MIME-Typ aktiviert die Dateierweiterung auf dem Server und der Mapping-Handler teilt IIS mit, was damit zu tun ist.

Sie müssen also auch den Mapping-Handler hinzufügen und dafür muss die Windows-Funktion Classic Asp installiert sein, um das Mapping durchführen zu können.

So fügen Sie den Mapping-Handler hinzu:

  1. Öffnen Sie den IIS7-Manager
  2. Wechseln Sie zu den Eigenschaften für IIS Server (oder nur zur Site, wenn Sie keine globale Einstellung wünschen).
  3. Klicke auf Handler Mappings
  4. Klicke auf Add a Script Map
  5. Geben Sie die Eigenschaften ein:
    • Anforderungspfad: *.json
    • Ausführbar: C:\WINDOWS\system32\inetsrv\asp.dll
    • Name: JSON(Sie können es so nennen, wie Sie möchten)
  6. Klicken Sie auf OK und Sie sind fertig. Es sollte funktionieren und Sie müssen keinen IIS-Reset durchführen.

Einige Leute werden Ihnen auch sagen, dass Sie "application / x-javascript" als MIME-Anwendung verwenden sollen, aber JSON ist per se kein Javascript (es ist jedoch eine Teilmenge) und sollte stattdessen "application / json" sein , da es sich um den von IANA registrierten Medientyp für JSON handelt.

bgmCoder
quelle
0

Überprüfen Sie auch die Anforderungsfilterung in IIS. Wenn ".json" vorhanden und blockiert ist, funktioniert nichts anderes.

Geben Sie hier die Bildbeschreibung ein

Glen Little
quelle