IIS non può servire determinate estensioni di file


10

Sto servendo file .JSON, ma anche se il file esiste, IIS continua a generare un errore 404 quando si accede a uno qualsiasi dei file. Ho provato a rinominare uno dei file in .JS e funziona.

Qualche puntatore quale impostazione può causare questo problema?

Risposte:


21

Per impostazione predefinita, IIS in W2K3 e versioni successive non servirà i file che non sono di tipo MIME di cui è a conoscenza (restituendo invece errori 404).

Devi aggiungere un tipo MIME a IIS per consentirgli di servire quel tipo di file. Puoi impostarlo a livello di sito o a livello di server.

Per impostare questo per l'intero server:

  • Aprire le proprietà per il server in Gestione IIS e fare clic su Tipi MIME
  • Fai clic su "Nuovo". Immettere "JSON" per l'estensione e "application / json" per il tipo MIME.

Aggiungo un nuovo tipo MIME, riavvio il sito Web, ma ancora 404. Grazie comunque, penso che questo potrebbe essere uno dei problemi.
Adrian Godong,

Hmm. Ricontrolla cosa hai cambiato. Il sintomo "rinominato il file e ha funzionato" è l' indicatore classico di questo comportamento.
Evan Anderson,

Triple lo ha verificato. Suppongo che non sia necessario riavviare l'intero server, giusto?
Adrian Godong,

Hmm ... Sto lottando per dirti cosa fare, allora. L'ho fatto da solo in una VM pulita di Windows Server 2003 SP2. Ho installato IIS, creato un file "foo.json" in "C: \ inetpub \ wwwroot", verificato che ho ottenuto un 404 quando ho colpito " localhost / foo.json " in un browser, ho aggiunto il tipo MIME per ".JSON "/" application / json "sul sito, quindi sono andato alla mia finestra IE ancora aperta e ho premuto F5 e ho visto il caricamento della pagina. Penso che tu abbia anche qualcos'altro in gioco.
Evan Anderson,

1
Avevo anche bisogno di assicurarmi che le estensioni del servizio Web fossero abilitate per farlo funzionare per me ...
gandalf

3

Ho avuto lo stesso problema. IIS fa qualcosa chiamato filtro di tipo MIME. Se non conosce il tipo MIME di un'estensione di file specifica, restituisce un errore 404.

Su IIS <7: aprire le proprietà del sito (o del server). Fai clic sulla scheda Intestazione HTTP . Fai clic sul pulsante Tipi MIME . Aggiungi il tipo di file * con il tipo MIME "application / octet-stream".

Per IIS 7: aprire il gestore IIS. Fai clic sul server o sul sito Web. Fare doppio clic sull'icona della funzione Tipi MIME . Nel riquadro Azioni, fai clic su Aggiungi . Popolare la casella "Estensione nome file" con * e la casella Tipo MIME con "application / octet-stream".


2

Ho aggiunto il tipo MIME .json- text/jsonal sito in IIS per visualizzarlo nel browser come testo.


QUESTO! QUESTO! Questo!
Tschallacka,

1

Per consolidare le risposte in un'altra risposta generale:

Ecco che arriva l'avvertimento:

  • A meno che un gestore di script (motore di contenuto attivo, ad esempio ASP / ASPX / PHP / Java / ISAPI / ecc.) Sia associato ad essi
    • ciò significa che IIS li tratta come contenuto attivo , non come file statici
  • Ai file di contenuto attivo offerti da qualsiasi estensione deve essere consentita tale estensione nell'elenco delle restrizioni delle estensioni del servizio Web (ovvero le restrizioni ISAPI / CGI in IIS 7)
    • se ricevi un 404 su un tipo di contenuto attivo in IIS 7, potrebbe anche significare che il tuo gestore non è installato - quindi devi effettivamente installare il componente che supporta tale estensione di file (ad esempio, se i file .aspx generano un 404, probabilmente non hai ASP.Net installato)

Se riscontri questo tipo di problema, apri i file di registro Web del sito Web e dai un'occhiata al codice di stato secondario (ovvero 404 3) per determinare esattamente perché il tuo sito Web non offre contenuti per IIS 6 o

  • utilizzare la traccia richieste non riuscite
  • (o solo gli errori dettagliati sulla console locale)

in IIS 7.


Questo "avvertimento" non ha senso: "... questo significa che IIS li tratta come contenuto attivo, non come file statici" Web.config dichiara i file json come statici: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </staticContent>

"IIS non servirà i file statici a cui non è associato un tipo MIME a meno che non sia associato un gestore di script" funziona ancora come (IMO) un'istruzione vera. Nel caso in cui qualcuno non sia in grado di servirli, sembra che il loro non abbia questa definizione nei propri file di configurazione da nessuna parte. Forse la tua copia di Windows è più recente della loro?
TristanK,

1

Ho avuto anche questo problema - e il problema si è rivelato essere i permessi dei file nella cartella in cui era archiviato il file json. Ho risposto a una domanda simile qui .

Queste persone hanno tutti ragione a dire che è necessario aggiungere il tipo MIME.

Il tipo MIME abilita l'estensione del file sul server e il Mapping Handler indica a IIS cosa farne.

Quindi devi anche aggiungere il Mapping Handler , e per questo devi avere la funzionalità Windows chiamata Classic Asp installata per gestire la mappatura.

Ecco come aggiungere il gestore di mapping:

  1. Apri Gestione IIS7
  2. Vai alle proprietà per IIS Server (o solo per il sito, se non desideri un'impostazione globale)
  3. Clicca su Handler Mappings
  4. Clicca su Add a Script Map
  5. Inserisci le proprietà:
    • Percorso richiesta: *.json
    • eseguibile: C:\WINDOWS\system32\inetsrv\asp.dll
    • Nome: JSON(puoi chiamarlo come preferisci)
  6. Fai clic su OK e hai finito. Dovrebbe iniziare a funzionare e non è necessario un ripristino IIS.

Inoltre, alcune persone ti diranno di usare `application / x-javascript 'come l'applicazione di tipo mime, ma JSON non è javascript, di per sé ( è comunque un sottoinsieme) e quindi dovrebbe essere invece' application / json ' , poiché è quel tipo di supporto registrato IANA per JSON.


0

Controlla anche il filtro richieste in IIS. Se ".json" è presente e bloccato, nient'altro funzionerà.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.