IIS не может обслуживать определенное расширение файла

10

Я обслуживаю файлы .JSON, но даже если файл существует, IIS продолжает выдавать ошибку 404 при обращении к любому из файлов. Я попытался переименовать один из файлов в .JS, и это работает.

Любой указатель, какие настройки могут вызвать эту проблему?

Адриан Годонг
источник

Ответы:

21

По умолчанию IIS в W2K3 и выше не будет обслуживать файлы, которые не относятся к типу MIME, о котором он знает (вместо этого возвращается 404 ошибки).

Вам нужно добавить MIME-тип в IIS, чтобы он мог обслуживать этот тип файла. Вы можете установить его на уровне сайта или на уровне сервера.

Чтобы установить это для всего сервера:

  • Откройте свойства сервера в диспетчере IIS и нажмите MIME Types
  • Нажмите «Новый». Введите «JSON» для расширения и «application / json» для типа MIME.
Эван Андерсон
источник
Я добавляю новый тип MIME, перезапускаю веб-сайт, но все равно 404. В любом случае, спасибо, я думаю, что это может быть одной из проблем.
Адриан Годонг
Хм. Дважды проверьте, что вы изменили. Симптом «переименовал файл и все заработало» является классическим показателем такого поведения.
Эван Андерсон
Трипл проверил это. Я предполагаю, что вам не нужно перезагружать весь сервер, верно?
Адриан Годонг
Хм ... я изо всех сил пытаюсь сказать тебе, что делать тогда. Я просто сделал это сам на чистой виртуальной машине Windows Server 2003 SP2. Я установил IIS, создал файл «foo.json» в «C: \ inetpub \ wwwroot», подтвердил, что получил 404, когда нажал « localhost / foo.json » в браузере, добавил тип MIME для «.JSON». "/" application / json "на сайт, затем перешел в мое все еще открытое окно IE, нажал F5 и увидел загрузку страницы. Я думаю, у тебя есть что-то еще в игре.
Эван Андерсон
1
Мне также нужно было убедиться, что расширения веб-служб были включены, чтобы сделать эту работу для меня ...
gandalf
3

У меня такая же проблема. IIS выполняет то, что называется фильтрацией MIME-типов. Если он не знает тип MIME конкретного расширения файла, он возвращает ошибку 404.

На IIS <7: откройте свойства сайта (или сервера). Нажмите на вкладку HTTP-заголовок . Нажмите на кнопку MIME Types . Добавьте тип файла * с типом MIME «application / octet-stream».

Для IIS 7: Откройте диспетчер IIS. Нажмите на сервер или веб-сайт. Дважды щелкните значок функции MIME Types . На панели действий нажмите кнопку Добавить . Заполните поле «Расширение имени файла» с помощью *, а в поле MIME Type - «application / octet-stream».

Эрик Фальскен
источник
2

Я добавил тип MIME .json- text/jsonна сайт в IIS для просмотра в браузере в виде текста.

neildeadman
источник
ЭТО! ЭТО! Эта!
Чаллака
1

Чтобы объединить ответы в еще один общий ответ:

Вот предостережение:

  • Если с ними не связан обработчик скриптов (активный движок контента, например ASP / ASPX / PHP / Java / ISAPI / etc)
    • это означает, что IIS рассматривает их как активный контент , а не как статические файлы
  • Для файлов активного содержимого, обслуживаемых любым расширением, это расширение должно быть разрешено в списке ограничений расширений веб-службы (также как ограничения ISAPI / CGI в IIS 7).
    • если вы получаете 404 для активного типа контента в IIS 7, это также может означать, что ваш обработчик не установлен - поэтому вам нужно на самом деле установить компонент, который поддерживает это расширение файла (например, если файлы .aspx генерируют 404, у вас, вероятно, не установлен ASP.Net)

Если вы сталкиваетесь с подобной проблемой, откройте файлы веб-журнала веб-сайта и посмотрите код дополнительного состояния (например, 404 3), чтобы точно определить, почему ваш веб-сайт не обслуживает контент для IIS 6, или

  • использовать отслеживание невыполненных запросов
  • (или просто подробные ошибки на локальной консоли)

в IIS 7.

TristanK
источник
Это «предостережение» не имеет смысла: «... это означает, что IIS рассматривает их как активный контент, а не статические файлы». Web.config объявляет файлы json как статические: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </ staticContent>
«IIS не будет обслуживать статические файлы, с которыми не связан тип MIME, если с ними не связан обработчик сценария», все еще работает как (IMO) истинное утверждение. В случае, если кто-то не может их обслуживать, похоже, что у них нигде нет этого определения в их конфигурационных файлах. Возможно, ваша копия Windows более свежая, чем их?
TristanK
1

У меня тоже была эта проблема - и проблема оказалась в правах доступа к папке, где хранился файл json. Я ответил на аналогичный вопрос здесь .

Все эти люди правильно сказали, что вам нужно добавить тип MIME.

Тип MIME включает расширение файла на сервере, а Mapping Handler сообщает IIS, что с ним делать.

Таким образом, вам также нужно добавить обработчик сопоставления , и для этого вам необходимо установить функцию Windows под названием Classic Asp для обработки сопоставления.

Вот как добавить обработчик сопоставления:

  1. Откройте диспетчер IIS7
  2. Перейдите к свойствам IIS Server (или просто к сайту, если вам не нужны глобальные настройки)
  3. Нажмите на Handler Mappings
  4. Нажмите на Add a Script Map
  5. Введите свойства:
    • Путь запроса: *.json
    • Исполняемые: C:\WINDOWS\system32\inetsrv\asp.dll
    • Имя: JSON(вы можете называть это как угодно)
  6. Нажмите ОК, и все готово. Он должен начать работать, и вам не нужно сбрасывать IIS.

Кроме того , некоторые люди скажут вам использовать `применение / х-JavaScript» в качестве приложения мимов-типа, но JSON не JavaScript, сами по себе (это является подмножеством, однако) , и поэтому оно должно быть „применение / JSON“ вместо , поскольку это IANA-зарегистрированный тип медиа для JSON.

bgmCoder
источник
0

Также проверьте фильтрацию запросов в IIS. Если ".json" там и заблокирован, больше ничего не будет работать.

введите описание изображения здесь

Глен Литтл
источник