Chrome中PNG图片的MIME类型警告

116

刚刚在Chrome中运行了我的网站,令人惊讶的是它对我所有的.png图像都出现了这个警告:

Resource interpreted as image but transferred with MIME type application/octet-stream.

有人以前见过这个吗?

敬礼


这种情况对我也发生过,但只在我的开发机上出现。你找到解释了吗? - BrianFinkel
有没有办法在Cassini中更改MIME类型?它似乎忽略了web.config中<system.webServer>部分中的<staticContent>设置。 - travis
1
为什么我不能成为同一个问题获得78个赞的人?总是太晚了... - Scott Selby
2
差不多晚了2年半 ;o) - Muleskinner
我刚刚发现你可以按住控制键并仅选择错误、调试和警告。这样,在调试时,您的日志不会被 MIME 类型错误淹没,但您仍然可以看到其他所有内容。非常方便。 - user736893
6个回答

84

当我运行一个使用ASP.NET WebForms应用程序时,遇到了这个问题,使用的是ASP.NET Development Server。

我怀疑如果你将IIS Express作为服务器(VS 2010 SP1),也会发生类似的情况。

在本地,我通过编辑项目设置(Web下)并从ASP.NET Development Server更改为我的本地机器上的IIS'解决'了我的问题。我可以看到PNG已经正确定义为图像MIME类型,当我访问本地IIS服务器时,它确实以正确的类型提供文件。


11
使用IIS Express,PNG图像没有MIME类型警告。它基本上是标准的IIS 7.5以更便携的形式呈现(标准的IIS没有问题提供PNG)。我刚刚启动了一个新项目,在Cassini(开发服务器)中确认了警告,将其设置为IIS Express并确认警告已消失。 - patridge
我遇到的奇怪问题是,我创建了一个MVC ASP.NET 4应用程序,并且在Cassini中加载png文件时运行良好。我将一个MVC ASP.NET 1应用程序升级到4,并且在Cassini中使用相同的png文件时遇到了这个问题。有什么想法吗? - MattB
1
@MattB - 我建议你在文本编辑器中将新的MVC4项目和升级后的项目的配置文件(csproj和web.config)并排进行比较。我的第一个猜测是可能有一个程序集引用或类似的东西没有自动升级。如果情况比这更复杂,你可能需要提出一个新问题并包含更多细节。 - Stefan Mohr
@StefanMohr 谢谢您的回复,抱歉回复晚了。我确实对两者进行了比较,并没有发现任何异常之处。我甚至修改了csproj和web.config文件,使它们与新创建的ASP.Net MVC 4项目完全相同,但仍然没有成功。最终,我只好创建了一个新项目,并将所有内容移植到新项目中。 - MattB
该网站托管在Azure上,我在控制台中遇到了这个令人烦恼的错误。 - Shimmy Weitzhandler

4
我在.htaccess文件中添加了以下类型(AddType image/type 扩展名),例如:

AddType image/png cur
AddType image/svg+xml svg svgz

4

这个警告告诉你,你的网络服务器没有配置正确的PNG图片MIME类型元数据。你应该咨询你的网络服务器管理员,并要求他们设置正确的MIME映射。


3
如果您是Web服务器的管理员,您可能会在网站管理员姊妹网站上找到答案。 - Rowland Shaw
+1 这是最具描述性和有用的答案。不知道为什么它被踩得这么多。 - Sir Crispalot
@JimG。如果您是管理员,您会说出您使用的Web服务器,或在网站上询问网站管理员 - Rowland Shaw
同意,这是最有用的答案。不明白@JimG的意思,给他点了踩。 - Anoyz

2

当然,上述解决方案是完美的。为了避免警告并使控制台更加清晰,我在我的代码中进行了以下更改(仅适用于ASP.NET开发服务器)。我编写了一个额外的处理程序:

PNGHandler.cs

class PNGHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    { 
       if(context.Request.HttpMethod == "GET") 
       {
             string requestedFile = context.Server.MapPath(context.Request.FilePath);
             FileInfo fileinfo = new FileInfo(requestedFile);
             string contentType = "";
             if (fileinfo.Exists && fileinfo.Extension.Remove(0, 1).ToUpper() == "PNG")
             {
                   contentType = "image/png";
                   context.Response.ContentType = contentType;
                   context.Response.TransmitFile(requestedFile);
                   context.Response.End();
              }
         }
    }
}

在web.config文件的system.web节点下添加了Http Handler。

<system.web>
 <httpHandlers>
 <add path="*.png" verb="*" type="PNGHandler" />
 </httpHandlers>
</system.web>

0
我发现避免垃圾邮件的最快方法是使用CTRL键选择错误、警告和调试,而不是全部选择。
全部: enter image description here 错误、警告和调试: enter image description here

0
我通过在“控制面板”>“程序和功能”>“打开或关闭Windows功能”>“IIS组件”>“万维网服务”>“常见HTTP功能”中启用静态内容来解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接