O IIS não pode atender a determinadas extensões de arquivo

10

Estou servindo arquivos .JSON, mas, embora o arquivo exista, o IIS continua lançando um erro 404 quando qualquer arquivo é acessado. Tentei renomear um arquivo para .JS e funciona.

Qualquer ponteiro que configuração pode causar esse problema?

Adrian Godong
fonte

Respostas:

21

Por padrão, o IIS no W2K3 e superior não veiculará arquivos que não sejam do tipo MIME que ele conhece (retornando erros 404).

Você precisa adicionar um tipo MIME ao IIS para permitir que ele atenda a esse tipo de arquivo. Você pode configurá-lo no nível do site ou no servidor.

Para definir isso para todo o servidor:

  • Abra as propriedades do servidor no Gerenciador do IIS e clique em Tipos MIME
  • Clique em "New". Digite "JSON" para a extensão e "application / json" para o tipo MIME.
Evan Anderson
fonte
Eu adiciono um novo tipo MIME, reinicio o site, mas ainda 404. Obrigado de qualquer maneira, acho que esse pode ser um dos problemas.
Adrian Godong
Hmm. Verifique duas vezes o que você mudou. O sintoma "renomeou o arquivo e funcionou" é o indicador clássico desse comportamento.
Evan Anderson
Triple verificou. Estou assumindo que você não precisa reiniciar todo o servidor, certo?
Adrian Godong
Hummm ... estou tentando dizer o que fazer, então. Eu fiz isso sozinho em uma VM limpa do Windows Server 2003 SP2. Instalei o IIS, criei um arquivo "foo.json" em "C: \ inetpub \ wwwroot", verifiquei que recebi um 404 ao clicar em " localhost / foo.json " em um navegador e adicionei o tipo MIME para ".JSON "/" application / json "para o site, depois fui até minha janela ainda aberta do IE, pressione F5 e vi a página carregar. Eu acho que você tem algo mais em jogo também.
Evan Anderson
1
Eu também precisava ter certeza de Web Service Extensions foram habilitados para fazer este trabalho para mim ...
Gandalf
3

Eu tive o mesmo problema. O IIS faz algo chamado filtragem de tipo MIME. Se não souber o tipo MIME de uma extensão de arquivo específica, ele retornará um erro 404.

No IIS <7: Abra as propriedades do site (ou servidor). Clique na guia Cabeçalho HTTP . Clique no botão Tipos MIME . Adicione o tipo de arquivo * com o tipo MIME "application / octet-stream".

Para o IIS 7: Abra o gerenciador do IIS. Clique no servidor ou site. Clique duas vezes no ícone do recurso Tipos MIME . No painel Ações, clique em Adicionar . Preencha a caixa "Extensão de nome de arquivo" com * e a caixa MIME Type com "application / octet-stream".

Eric Falsken
fonte
2

Eu adicionei o tipo MIME .json- text/jsonao site no IIS para exibir no navegador como texto.

neildeadman
fonte
ISTO! ISTO! Este!
Tschallacka
1

Para consolidar respostas em mais uma resposta geral:

Aí vem a ressalva:

  • A menos que um manipulador de scripts (mecanismo de conteúdo ativo, por exemplo, ASP / ASPX / PHP / Java / ISAPI / etc) esteja associado a eles
    • isso significa que o IIS os trata como conteúdo ativo , não como arquivos estáticos
  • Arquivos de conteúdo ativo atendidos por qualquer extensão devem ter essa extensão permitida na lista de restrições de extensões de serviço da Web (também conhecida como restrições ISAPI / CGI no IIS 7)
    • se você está recebendo um 404 em um tipo de conteúdo ativo no IIS 7, também pode significar que seu manipulador não está instalado. Portanto, você precisa instalar o componente que suporta essa extensão de arquivo (por exemplo, se os arquivos .aspx geram um 404, você provavelmente não possui o ASP.Net instalado)

Se você estiver enfrentando esse tipo de problema, abra os arquivos de log da web do site e consulte o código de sub-status (por exemplo, 404 3) para determinar exatamente por que o site não está exibindo conteúdo para o IIS 6 ou

  • usar rastreamento de solicitação com falha
  • (ou apenas os erros detalhados no console local)

no IIS 7.

TristanK
fonte
Essa "advertência" não faz sentido: "... isso significa que o IIS os trata como conteúdo ativo, não como arquivos estáticos" O Web.config declara os arquivos json como estáticos: <staticContent> <mimeMap fileExtension = ". Json" mimeType = "application / json" /> </staticContent>
"O IIS não servirá arquivos estáticos que não têm um tipo MIME associado a eles, a menos que um manipulador de scripts esteja associado a eles" ainda funciona como (IMO) uma declaração verdadeira. No caso de alguém incapaz de atendê-los, parece que o deles não possui essa definição em seus arquivos de configuração em nenhum lugar. Talvez sua cópia do Windows seja mais recente que a deles?
TristanK
1

Eu também tive esse problema - e o problema acabou sendo permissões de arquivo na pasta em que o arquivo json estava armazenado. Eu respondi uma pergunta semelhante aqui .

Todas essas pessoas estão corretas ao dizer que você precisa adicionar o tipo MIME.

O tipo MIME habilita a extensão do arquivo no servidor e o Mapping Handler informa ao IIS o que fazer com ele.

Portanto, você também precisa adicionar o Mapping Handler e, para isso, deve ter o recurso do Windows chamado Classic Asp instalado para lidar com o mapeamento.

Aqui está como adicionar o manipulador de mapeamento:

  1. Abra o Gerenciador do IIS7
  2. Vá para as propriedades do servidor IIS (ou apenas o site, se você não quiser uma configuração global)
  3. Clique em Handler Mappings
  4. Clique em Add a Script Map
  5. Digite as propriedades:
    • Caminho da solicitação: *.json
    • Executável: C:\WINDOWS\system32\inetsrv\asp.dll
    • Nome: JSON(você pode chamá-lo como quiser)
  6. Clique em OK e pronto. Ele deve começar a funcionar e você não precisa de uma redefinição do IIS.

Além disso, algumas pessoas dirão para você usar `application / x-javascript 'como o aplicativo do tipo mime, mas o JSON não é javascript, por si só ( é um subconjunto, no entanto) e, portanto, deve ser' application / json ' , como é o tipo de mídia registrado pela IANA para JSON.

bgmCoder
fonte
0

Verifique também a Solicitação de filtragem no IIS. Se ".json" estiver lá e bloqueado, nada mais funcionará.

insira a descrição da imagem aqui

Glen Little
fonte