IIS Tidak Dapat Melayani Ekstensi File Tertentu

10

Saya melayani file .JSON, tetapi meskipun file itu ada, IIS terus melemparkan kesalahan 404 ketika salah satu file diakses. Saya mencoba mengubah nama salah satu file menjadi .JS, dan berhasil.

Setiap penunjuk pengaturan apa yang dapat menyebabkan masalah ini?

Adrian Godong
sumber

Jawaban:

21

Secara default, IIS di W2K3 dan di atas tidak akan melayani file yang bukan tipe MIME yang diketahuinya (sebagai gantinya mengembalikan 404 kesalahan).

Anda perlu menambahkan tipe MIME ke IIS untuk memungkinkannya melayani jenis file itu. Anda dapat mengaturnya di tingkat situs atau di tingkat server.

Untuk mengatur ini untuk seluruh server:

  • Buka properti untuk server di IIS Manager dan klik Jenis MIME
  • Klik "Baru". Masukkan "JSON" untuk ekstensi dan "application / json" untuk jenis MIME.
Evan Anderson
sumber
Saya menambahkan tipe MIME baru, restart situs web, tetapi masih 404. Terima kasih, saya pikir ini mungkin salah satu masalah.
Adrian Godong
Hmm. Periksa ulang apa yang telah Anda ubah. Gejala "berganti nama file dan berhasil" adalah indikator klasik dari perilaku ini.
Evan Anderson
Triple memeriksanya. Saya berasumsi bahwa Anda tidak perlu me-restart seluruh server, kan?
Adrian Godong
Hmm ... kalau begitu aku berusaha memberitahumu apa yang harus dilakukan. Saya hanya melakukannya sendiri di VM bersih Windows Server 2003 SP2. Saya menginstal IIS, membuat file "foo.json" di "C: \ inetpub \ wwwroot", memverifikasi bahwa saya mendapat 404 ketika saya menekan " localhost / foo.json " di browser, menambahkan jenis MIME untuk ".JSON "/" application / json "ke situs, lalu pergi ke jendela IE saya yang masih terbuka dan tekan F5 dan lihat halaman dimuat. Saya pikir Anda juga memainkan sesuatu yang lain.
Evan Anderson
1
Saya juga perlu memastikan Perluasan Layanan Web diaktifkan untuk membuat ini berfungsi untuk saya ...
gandalf
3

Saya memiliki masalah yang sama. IIS melakukan sesuatu yang disebut penyaringan tipe MIME. Jika ia tidak tahu jenis MIME ekstensi file tertentu, ia mengembalikan kesalahan 404.

Pada IIS <7: Buka properti situs (atau server). Klik pada tab HTTP-Header . Klik pada tombol Jenis MIME . Tambahkan jenis file * dengan tipe MIME "application / octet-stream".

Untuk IIS 7: Buka manajer IIS. Klik server atau situs web. Klik dua kali ikon fitur MIME Types . Di panel tindakan, klik Tambahkan . Isi kotak "Ekstensi Nama File" dengan * dan kotak Jenis MIME dengan "application / octet-stream".

Eric Falsken
sumber
2

Saya menambahkan tipe MIME .json- text/jsonke situs di IIS untuk melihat di browser sebagai teks.

Neildeadman
sumber
INI! INI! Ini!
Tschallacka
1

Untuk menggabungkan jawaban menjadi satu jawaban umum:

Di sinilah peringatan:

  • Kecuali jika penangan skrip (mesin konten aktif, misalnya, ASP / ASPX / PHP / Java / ISAPI / dll) dikaitkan dengan mereka
    • ini berarti bahwa IIS memperlakukan mereka sebagai konten aktif , bukan file statis
  • File konten aktif yang dilayani oleh ekstensi apa pun harus memiliki ekstensi yang diizinkan dalam daftar pembatasan Ekstensi Layanan Web (alias pembatasan ISAPI / CGI di IIS 7)
    • jika Anda mendapatkan 404 pada tipe konten aktif di IIS 7, itu mungkin juga berarti pawang Anda tidak diinstal - jadi Anda harus menginstal komponen yang mendukung ekstensi file tersebut (misalnya, jika file .aspx menghasilkan 404, Anda mungkin tidak menginstal ASP.Net)

Jika Anda mengalami masalah seperti ini, buka file log web situs web, dan lihat kode sub-status (yaitu 404 3) untuk menentukan dengan tepat mengapa situs web Anda tidak menyajikan konten untuk IIS 6, atau

  • gunakan Penelusuran Permintaan Gagal
  • (atau hanya kesalahan terperinci pada konsol lokal)

dalam IIS 7.

TristanK
sumber
"Peringatan" ini tidak masuk akal: "... ini berarti IIS memperlakukannya sebagai konten aktif, bukan file statis" Web.config menyatakan file json sebagai statis: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </staticContent>
"IIS tidak akan menayangkan file statis yang tidak memiliki tipe MIME yang terkait dengannya kecuali penangan skrip dikaitkan dengan mereka" masih berfungsi sebagai (IMO) pernyataan yang benar. Dalam kasus seseorang yang tidak dapat melayani mereka, sepertinya milik mereka tidak memiliki definisi ini dalam file konfigurasi mereka di mana pun. Mungkin salinan Windows Anda lebih baru daripada milik mereka?
TristanK
1

Saya punya masalah ini juga - dan masalahnya ternyata adalah izin file pada folder tempat file json disimpan. Saya menjawab pertanyaan serupa di sini .

Orang-orang ini semua benar untuk mengatakan Anda perlu menambahkan tipe MIME

Tipe MIME memungkinkan ekstensi file pada server dan Pemetaan Handler memberi tahu IIS apa yang harus dilakukan dengannya.

Jadi Anda juga harus menambahkan Handler Pemetaan , dan untuk itu Anda harus memiliki Fitur Windows yang disebut Classic Asp diinstal untuk menangani pemetaan.

Berikut cara menambahkan Pemetaan Handler:

  1. Buka Manajer IIS7
  2. Buka properti untuk IIS Server (atau hanya situs, jika Anda tidak menginginkan pengaturan global)
  3. Klik Handler Mappings
  4. Klik Add a Script Map
  5. Masukkan properti:
    • Jalur Permintaan: *.json
    • Dapat dieksekusi: C:\WINDOWS\system32\inetsrv\asp.dll
    • Nama: JSON(Anda bisa menyebutnya apa saja yang Anda suka)
  6. Klik OK, dan Anda selesai. Seharusnya mulai bekerja dan Anda tidak perlu me-reset IIS.

Juga, beberapa orang akan memberitahu Anda untuk menggunakan `application / x-javascript 'sebagai aplikasi tipe mime, tetapi JSON bukan javascript, per se (itu adalah himpunan bagian, namun) dan jadi itu seharusnya' application / json 'sebagai gantinya , karena jenis media yang terdaftar IANA untuk JSON.

bgmCoder
sumber
0

Periksa juga Pemfilteran Permintaan di IIS. Jika ".json" ada di sana dan diblokir, tidak ada lagi yang akan berfungsi.

masukkan deskripsi gambar di sini

Glen Little
sumber