IIS не может обслуживать определенное расширение файла
Я обслуживаю файлы.JSON, но даже если файл существует, IIS продолжает выдавать ошибку 404 при обращении к любому из файлов. Я попытался переименовать один из файлов в.JS, и это работает.
Любой указатель, какие настройки могут вызвать эту проблему?
6 ответов
По умолчанию IIS в W2K3 и выше не будет обслуживать файлы, которые не относятся к типу MIME, о котором он знает (вместо этого они возвращают 404 ошибки).
Вам нужно добавить MIME-тип в IIS, чтобы он мог обслуживать этот тип файла. Вы можете установить его на уровне сайта или на уровне сервера.
Чтобы установить это для всего сервера:
- Откройте свойства сервера в диспетчере IIS и нажмите "Типы MIME".
- Нажмите "Новый". Введите "JSON" для расширения и "application/json" для типа MIME.
У меня такая же проблема. IIS выполняет то, что называется фильтрацией MIME-типов. Если он не знает тип MIME конкретного расширения файла, он возвращает ошибку 404.
На IIS <7: откройте свойства сайта (или сервера). Нажмите на вкладку HTTP-заголовок. Нажмите на кнопку MIME Types. Добавьте тип файла * с типом MIME "application/octet-stream".
Для IIS 7: Откройте диспетчер IIS. Нажмите на сервер или веб-сайт. Дважды щелкните значок функции MIME Types. На панели действий нажмите кнопку Добавить. Заполните поле "Расширение имени файла" с помощью *, а в поле MIME Type - "application/octet-stream".
Я добавил MIME тип .json
- text/json
на сайт в IIS для просмотра в браузере в виде текста.
Чтобы объединить ответы в еще один общий ответ:
- IIS не будет обслуживать файлы, с которыми не связан тип MIME
Здесь следует предостережение:
- Если с ними не связан обработчик скриптов (активный движок контента, например ASP/ASPX/PHP/Java/ISAPI/etc)
- это означает, что IIS рассматривает их как активный контент, а не как статические файлы
- Для файлов активного содержимого, обслуживаемых любым расширением, это расширение должно быть разрешено в списке ограничений расширений веб-службы (также как ограничения ISAPI/CGI в IIS 7).
- если вы получаете 404 для активного типа контента в IIS 7, это также может означать, что ваш обработчик не установлен - поэтому вам нужно на самом деле установить компонент, который поддерживает это расширение файла (например, если файлы.aspx генерируют 404, у вас, вероятно, не установлен ASP.Net)
Если вы сталкиваетесь с подобной проблемой, откройте файлы веб-журнала веб-сайта и посмотрите код дополнительного состояния (например, 404 3), чтобы точно определить, почему ваш веб-сайт не обслуживает контент для IIS 6, или
- использовать отслеживание невыполненных запросов
- (или просто подробные ошибки на локальной консоли)
в IIS 7.
У меня тоже была эта проблема - и проблема оказалась в правах доступа к папке, где хранился файл json. Я ответил на аналогичный вопрос здесь.
Все эти люди правильно сказали, что вам нужно добавить тип MIME.
Тип MIME включает расширение файла на сервере, а Mapping Handler сообщает IIS, что с ним делать.
Таким образом, вам также нужно добавить обработчик сопоставления, и для этого вам необходимо установить функцию Windows под названием Classic Asp для обработки сопоставления.
Вот как добавить обработчик сопоставления:
- Откройте диспетчер IIS7
- Перейдите к свойствам IIS Server (или просто к сайту, если вам не нужны глобальные настройки)
- Нажмите на
Handler Mappings
- Нажмите на
Add a Script Map
- Введите свойства:
- Путь запроса:
*.json
- Исполняемые:
C:\WINDOWS\system32\inetsrv\asp.dll
- Название:
JSON
(вы можете называть это как угодно)
- Путь запроса:
- Нажмите OK, и все готово. Он должен начать работать, и вам не нужно сбрасывать IIS.
Кроме того, некоторые люди скажут вам использовать `application/x-javascript'в качестве приложения mime-типа, но JSON сам по себе не является javascript (однако , это подмножество), и поэтому вместо него должно быть'application/json', поскольку это IANA-зарегистрированный тип медиа для JSON.
Также проверьте фильтрацию запросов в IIS. Если «.json» существует и заблокирован, больше ничего не будет работать.