Usługi IIS nie mogą wyświetlać określonych rozszerzeń plików

10

Podaję pliki .JSON, ale mimo że plik istnieje, IIS zgłasza błąd 404 podczas uzyskiwania dostępu do dowolnego pliku. Próbowałem zmienić nazwę jednego z plików na .JS i działa.

Jakiś wskaźnik, jakie ustawienie może powodować ten problem?

Adrian Godong
źródło

Odpowiedzi:

21

Domyślnie usługi IIS w wersji W2K3 i nowszych nie będą obsługiwać plików, które nie są znanymi typami MIME (zamiast zwracają błędy 404).

Musisz dodać typ MIME do IIS, aby umożliwić obsługę tego typu plików. Możesz ustawić to na poziomie witryny lub na poziomie serwera.

Aby ustawić to dla całego serwera:

  • Otwórz właściwości serwera w Menedżerze IIS i kliknij Typy MIME
  • Kliknij „Nowy”. Wpisz „JSON” dla rozszerzenia i „application / json” dla typu MIME.
Evan Anderson
źródło
Dodaję nowy typ MIME, ponownie uruchamiam witrynę, ale wciąż 404. Dzięki, myślę, że to może być jeden z problemów.
Adrian Godong
Hmm Sprawdź dokładnie, co zmieniłeś. Objaw „zmiana nazwy pliku i zadziałał” jest klasycznym wskaźnikiem tego zachowania.
Evan Anderson
Potrójny to sprawdził. Zakładam, że nie musisz restartować całego serwera, prawda?
Adrian Godong,
Hmm ... staram się więc ci powiedzieć, co masz robić. Zrobiłem to sam na czystej maszynie wirtualnej z systemem Windows Server 2003 SP2. Zainstalowałem IIS, utworzyłem plik „foo.json” w „C: \ inetpub \ wwwroot”, zweryfikowałem, że dostałem 404, gdy uderzyłem „ localhost / foo.json ” w przeglądarce, dodałem typ MIME dla „.JSON „/” application / json ”na stronie, a następnie przeszedłem do mojego wciąż otwartego okna IE i nacisnąłem F5 i zobaczyłem ładowanie strony. Myślę, że masz też coś innego do roboty.
Evan Anderson
1
Musiałem także upewnić się, że rozszerzenia usług sieciowych są włączone, aby działało to dla mnie ...
gandalf
3

Miałem ten sam problem. IIS robi coś, co nazywa się filtrowaniem typu MIME. Jeśli nie zna typu MIME określonego rozszerzenia pliku, zwraca błąd 404.

W usługach IIS <7: Otwórz właściwości witryny (lub serwera). Kliknij kartę Nagłówek HTTP . Kliknij przycisk Typy MIME . Dodaj typ pliku * z typem MIME „application / octet-stream”.

W przypadku IIS 7: Otwórz menedżera IIS. Kliknij serwer lub stronę internetową. Kliknij dwukrotnie ikonę funkcji Typy MIME . W okienku Akcje kliknij Dodaj . Wypełnij pole „File Name Extension” *, a pole MIME Type „application / octet-stream”.

Eric Falsken
źródło
2

Dodałem typ MIME .json- text/jsondo strony w IIS, aby wyświetlić w przeglądarce jako tekst.

neildeadman
źródło
TO! TO! To!
Tschallacka,
1

Aby skonsolidować odpowiedzi w jedną ogólną odpowiedź:

Oto zastrzeżenie:

  • Chyba że powiązany jest z nim moduł obsługi skryptów (silnik treści aktywnych, np. ASP / ASPX / PHP / Java / ISAPI / itp.)
    • oznacza to, że IIS traktuje je jako zawartość aktywną , a nie pliki statyczne
  • Pliki treści aktywnych obsługiwane przez dowolne rozszerzenie muszą mieć to rozszerzenie dozwolone na liście ograniczeń rozszerzeń usług sieciowych (inaczej ISAPI / CGI w IIS 7)
    • jeśli otrzymujesz 404 na aktywnym typie zawartości w IIS 7, może to również oznaczać, że twój moduł obsługi nie jest zainstalowany - więc musisz faktycznie zainstalować komponent, który obsługuje to rozszerzenie pliku (na przykład, jeśli pliki .aspx generują plik 404, prawdopodobnie nie masz zainstalowanej ASP.Net)

Jeśli masz tego rodzaju problem, otwórz pliki dziennika internetowego witryny i spójrz na kod podrzędny (tj. 404 3), aby dokładnie ustalić, dlaczego witryna nie wyświetla treści dla IIS 6 lub

  • użyj śledzenia nieudanych żądań
  • (lub tylko szczegółowe błędy na lokalnej konsoli)

w IIS 7.

TristanK
źródło
To „zastrzeżenie” nie ma sensu: „... oznacza to, że IIS traktuje je jako zawartość aktywną, a nie pliki statyczne” Web.config deklaruje pliki json jako statyczne: <staticContent> <mimeMap fileExtension = ". Json" mimeType = „application / json” /> </staticContent>
„Usługi IIS nie będą obsługiwać plików statycznych, które nie są powiązane z typem MIME, chyba że powiązany jest z nimi moduł obsługi skryptów” nadal działa jako (IMO) prawdziwa instrukcja. W przypadku kogoś, kto nie jest w stanie ich obsłużyć, wygląda na to, że ich nigdzie nie ma tej definicji w swoich plikach konfiguracyjnych. Być może twoja kopia systemu Windows jest nowsza niż ich?
TristanK
1

Miałem też ten problem - i okazało się, że są to uprawnienia do plików w folderze, w którym przechowywany był plik json. Odpowiedziałem na podobne pytanie tutaj .

Wszyscy ci ludzie mają rację, mówiąc, że musisz dodać typ MIME.

Typ MIME umożliwia rozszerzenie pliku na serwerze, a moduł obsługi map mówi IIS, co z tym zrobić.

Musisz także dodać moduł obsługi map , a do tego musisz mieć zainstalowaną funkcję systemu Windows o nazwie Classic Asp , aby obsłużyć mapowanie.

Oto jak dodać moduł obsługi mapowania:

  1. Otwórz Menedżera IIS7
  2. Przejdź do właściwości serwera IIS (lub tylko strony, jeśli nie chcesz ustawienia globalnego)
  3. Kliknij Handler Mappings
  4. Kliknij Add a Script Map
  5. Wpisz właściwości:
    • Ścieżka żądania: *.json
    • Plik wykonywalny: C:\WINDOWS\system32\inetsrv\asp.dll
    • Nazwa: JSON(możesz to nazwać jak chcesz)
  6. Kliknij OK i gotowe. Powinien zacząć działać i nie potrzebujesz resetowania IIS.

Ponadto niektórzy ludzie powiedzą ci, abyś używał `application / x-javascript 'jako aplikacji typu mime, ale JSON nie jest javascript, sam w sobie (jest to jednak podzbiór), więc powinien być zamiast tego„ application / json ” , ponieważ jest to typ nośnika zarejestrowany przez IANA dla JSON.

bgmCoder
źródło
0

Sprawdź także Filtrowanie żądań w IIS. Jeśli plik „.json” jest dostępny i zablokowany, nic innego nie będzie działać.

wprowadź opis zdjęcia tutaj

Glen Little
źródło