写这个问题是为了帮助其他遇到这个问题的人,因为我在需要的时候没有找到明显或明确的答案。
症状:
- 您有一个遗留网站/应用程序
- 在web服务器上实现"X-Content-Type:nosniff"http标头是一种良好的做法
- IE11现在显示了一些图像,但其他图像显示为带白十字的黑框
怎么了?
请注意,在我的案例中,这是Win2016和IIS的问题,但对于任何发送X-content-type http标头的web服务器来说,这都是一个通用问题。
这是关于mime嗅探的。通过在web服务器上设置"X-Content-Type:nosniff"http标头,您告诉浏览器客户端注意图像mime类型,因为您只想发送正确的mime详细信息。
mime类型取决于请求图像时服务器上的内容类型标头。您可以使用Fiddler和类似的跟踪工具看到这一点。
在我们的案例中,服务器上有一个遗留的图像服务器程序,用于为文件访问添加额外的基于应用程序的安全层。基本上是一个用VB6编写的DIY程序,但它可以是任何东西。甚至我们在开发后期的C#替换也出现了同样的问题。
这是以"应用程序/八位字节流"的形式发送内容类型,它绝对不像"images.jpg"或"images/png"等。
发送X内容类型报头的服务器和发送图像数据的不正确内容类型的图像服务器的组合导致IE11判定图像不可用;白十字问题。
解决方案:
- temp解决方案是从web服务器配置中删除X-content-type:nosniff
- 长期的解决方案是修改文件服务器dll,以便为所提供的文件类型发送适当的内容类型标头。并在web服务器上重新安装"X-content-type:nosniff">