IIS 7.5 Static Content Not Loading: MIME Type and File Handling Solutions


2 views

When IIS 7.5 serves ASPX pages flawlessly but chokes on static files, we're typically looking at either MIME type misconfigurations or deeper permission issues. Here's what I discovered while troubleshooting a similar production server:



dism /online /get-features | find "Static-Content"

The most common culprit is missing MIME types. Verify these essential types exist:


<configuration>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".html" mimeType="text/html" />
      <mimeMap fileExtension=".css" mimeType="text/css" />
      <mimeMap fileExtension=".js" mimeType="application/javascript" />
      <mimeMap fileExtension=".png" mimeType="image/png" />
    </staticContent>
  </system.webServer>
</configuration>

Sometimes ASP.NET handlers hijack static file requests:


<system.webServer>
  <handlers>
    <remove name="StaticFile" />
    <add name="StaticFile" path="*" verb="*" 
         modules="StaticFileModule" 
         resourceType="Either" 
         requireAccess="Read" />
  </handlers>
</system.webServer>

Beyond basic IUSR permissions, try:


icacls "C:\inetpub\wwwroot\mysite" /grant "IIS_IUSRS:(OI)(CI)(RX)"
icacls "C:\inetpub\wwwroot\mysite" /grant "USERS:(OI)(CI)(RX)"

Quick health checks:


Get-WebConfigurationProperty -Filter "/system.webServer/staticContent/mimeMap" -Name *
Test-WebConfiguration -VirtualPath "/" -Item "Static Content"

Even with .NET 4.0 Integrated mode, check:


appcmd list apppool /text:*
appcmd set config /section:applicationPools /[name='MyAppPool'].enable32BitAppOnWin64:false

When your IIS 7.5 serves ASPX pages flawlessly but chokes on basic static files, you're likely facing one of these fundamental issues:

HTTP/1.1 200 OK
Content-Type: text/plain  // Wrong! Should be image/png or text/css
Server: Microsoft-IIS/7.5

First, verify these critical settings:

  1. Static Content Role Service:
    Server Manager > Roles > Web Server (IIS) > Add Role Services
    Check "Static Content" under Common HTTP Features
  2. Handler Mappings:
    <system.webServer>
      <handlers>
        <add name="StaticFile" path="*" verb="*" 
             modules="StaticFileModule" resourceType="Either" />
      </handlers>
    </system.webServer>

Missing MIME types force IIS to default to text/plain. Add these essential types:

<staticContent>
  <mimeMap fileExtension=".html" mimeType="text/html" />
  <mimeMap fileExtension=".css" mimeType="text/css" />
  <mimeMap fileExtension=".js" mimeType="application/javascript" />
  <mimeMap fileExtension=".png" mimeType="image/png" />
  <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
</staticContent>

Beyond IUSR and IIS_IUSR, check these often-overlooked permissions:

  • NTFS permissions on parent folders
  • Application pool identity (try setting to ApplicationPoolIdentity)
  • Special permissions like "List folder contents"

Enable tracing to pinpoint exactly where IIS fails:

appcmd.exe set config -section:system.webServer/tracing /enabled:"true" /commit:apphost
appcmd.exe configure trace "Default Web Site" /enable /path:*.html

For stubborn cases, reset all IIS components:

%windir%\system32\inetsrv\appcmd list app /text:name | findstr MyApp
%windir%\system32\inetsrv\appcmd delete app MyApp/
iisreset /reboot

Remember to backup configurations before drastic measures!