IIS no puede servir cierta extensión de archivo


10

Estoy sirviendo archivos .JSON, pero a pesar de que el archivo existe, IIS sigue arrojando un error 404 cuando se accede a cualquiera de los archivos. Intenté renombrar uno de los archivos a .JS, y funciona.

¿Algún indicador de qué configuración puede causar este problema?

Respuestas:


21

De manera predeterminada, IIS en W2K3 y superior no servirá archivos que no sean del tipo MIME que conoce (en cambio, devuelve errores 404).

Debe agregar un tipo MIME a IIS para permitir que sirva ese tipo de archivo. Puede configurarlo en el nivel del sitio o en el nivel del servidor.

Para configurar esto para todo el servidor:

  • Abra las propiedades para el servidor en el Administrador de IIS y haga clic en Tipos MIME
  • Haga clic en "Nuevo". Ingrese "JSON" para la extensión y "application / json" para el tipo MIME.

Agrego un nuevo tipo MIME, reinicio el sitio web, pero aún así 404. Gracias de todos modos, creo que este puede ser uno de los problemas.
Adrian Godong el

Hmm Comprueba lo que has cambiado. El síntoma "cambió el nombre del archivo y funcionó" es el indicador clásico de este comportamiento.
Evan Anderson el

Triple lo comprobó. Supongo que no necesita reiniciar todo el servidor, ¿verdad?
Adrian Godong el

Hmm ... Estoy luchando para decirte qué hacer, entonces. Lo hice yo mismo en una máquina virtual limpia de Windows Server 2003 SP2. Instalé IIS, creé un archivo "foo.json" en "C: \ inetpub \ wwwroot", verifiqué que obtuve un 404 cuando presioné " localhost / foo.json " en un navegador, agregué el tipo MIME para ".JSON "/" application / json "al sitio, luego fui a mi ventana IE aún abierta y presioné F5 y vi la página cargar. Creo que también tienes algo más en juego.
Evan Anderson el

1
También tenía que asegurarme de que las Extensiones de servicio web estuvieran habilitadas para que esto funcionara para mí ...
gandalf

3

Yo tuve el mismo problema. IIS hace algo llamado filtrado de tipo MIME. Si no conoce el tipo MIME de una extensión de archivo específica, devuelve un error 404.

En IIS <7: abra las propiedades del sitio (o servidor). Haga clic en la pestaña Encabezado HTTP . Haga clic en el botón Tipos MIME . Agregue el tipo de archivo * con el tipo MIME "application / octet-stream".

Para IIS 7: Abra el administrador de IIS. Haga clic en el servidor o sitio web. Haga doble clic en el icono de la función Tipos MIME . En el panel Acciones, haga clic en Agregar . Rellene el cuadro "Extensión de nombre de archivo" con * y el cuadro Tipo MIME con "application / octet-stream".



1

Para consolidar las respuestas en una respuesta más general:

Aquí viene la advertencia:

  • A menos que un controlador de script (motor de contenido activo, por ejemplo, ASP / ASPX / PHP / Java / ISAPI / etc.) esté asociado con ellos
    • Esto significa que IIS los trata como contenido activo , no como archivos estáticos.
  • Los archivos de contenido activo servidos por cualquier extensión deben tener esa extensión permitida en la lista de restricción de Extensiones de servicio web (también conocida como restricciones ISAPI / CGI en IIS 7)
    • si obtiene un 404 en un tipo de contenido activo en IIS 7, también puede significar que su controlador no está instalado, por lo que debe instalar el componente que admite esa extensión de archivo (por ejemplo, si los archivos .aspx generan un 404, probablemente no tenga instalado ASP.Net)

Si experimenta este tipo de problema, abra los archivos de registro web del sitio web y eche un vistazo al código de sub-estado (es decir, 404 3) para determinar exactamente por qué su sitio web no está sirviendo contenido para IIS 6, o

  • utilizar el seguimiento de solicitud fallida
  • (o solo los errores detallados en la consola local)

en IIS 7.


Esta "advertencia" no tiene sentido: "... esto significa que IIS los trata como contenido activo, no como archivos estáticos". Web.config declara los archivos json como estáticos: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </staticContent>

"IIS no servirá archivos estáticos que no tengan un tipo MIME asociado con ellos a menos que un controlador de script esté asociado con ellos" todavía funciona como (IMO) una declaración verdadera. En el caso de que alguien no pueda atenderlos, parece que la suya no tiene esta definición en sus archivos de configuración en ninguna parte. ¿Quizás su copia de Windows es más reciente que la de ellos?
TristanK

1

También tuve este problema, y ​​el problema resultó ser los permisos de archivo en la carpeta donde estaba almacenado el archivo json. Respondí una pregunta similar aquí .

Estas personas son correctas al decir que necesita agregar el tipo MIME.

El tipo MIME habilita la extensión de archivo en el servidor y el controlador de mapeo le dice a IIS qué hacer con él.

Por lo tanto, también debe agregar el controlador de asignación , y para eso debe tener instalada la característica de Windows llamada Classic Asp para manejar la asignación.

Aquí se explica cómo agregar el controlador de mapeo:

  1. Abra el Administrador IIS7
  2. Vaya a las propiedades del servidor IIS (o solo al sitio, si no desea una configuración global)
  3. Haga clic en Handler Mappings
  4. Haga clic en Add a Script Map
  5. Ingrese las propiedades:
    • Ruta de solicitud: *.json
    • Ejecutable: C:\WINDOWS\system32\inetsrv\asp.dll
    • Nombre: JSON(puedes llamarlo como quieras)
  6. Haga clic en Aceptar y ya está. Debería comenzar a funcionar y no necesita reiniciar IIS.

Además, algunas personas le dirán que use `application / x-javascript 'como la aplicación de tipo mime, pero JSON no es javascript, per se (sin embargo, es un subconjunto) y, por lo tanto, debería ser' application / json '. , ya que es ese tipo de medio registrado en IANA para JSON.


0

También verifique el Filtrado de solicitudes en IIS. Si ".json" está allí y bloqueado, nada más funcionará.

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.