为啥 IIS 需要声明 mime 类型?

Posted

技术标签:

【中文标题】为啥 IIS 需要声明 mime 类型?【英文标题】:Why does IIS require mime-types to be declared?为什么 IIS 需要声明 mime 类型? 【发布时间】:2012-08-17 00:27:53 【问题描述】:

在我的一项作业中,我尝试渲染 SVG 图像。我花了一些时间才看到一个链接,该链接指出,为了让 IIS express 呈现 SVG 图像,您必须在 web.config 文件中包含以下代码

<staticContent>
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

成功了。但我不明白为什么/如何?以前我认为服务器应该发送正确的 Content-Type 标头。但我的 svg 代码是用 javascript 编写的。我认为(可能是错误的)IIS 只将 html 文件发送到客户端,并且这些 HTML 文件在标题中链接了 Javascript。那么,这是否意味着 IIS 也在扫描与 HTML 相关的所有 javascript 文件?这似乎有点难以置信。如果我的 HTML 主文件中有 10 个 javascript 文件,其中一个有 SVG 文件,这是否意味着 IIS 将扫描所有这些文件,然后发现 SVG 丢失?是这样的吗?

谢谢

【问题讨论】:

【参考方案1】:

当您的浏览器点击一个 URL 时,它最初只下载 HTML。对于每个链接的文件(Javascript、图像、CSS、SVG 等),浏览器都会向服务器发出单独的请求。正如您所指出的,除非 IIS 识别出 MIME 类型,否则它不会提供这些文件。

要回答您的问题,不,它不是这样工作的。 IIS 不会扫描 HTML 文件,它只是被动响应来自客户端(浏览器)的请求。它是解析 HTML 和 Javascript 并执行 JavaScript 的浏览器,根据需要额外往返返回服务器以获取链接资源。

编辑

IIS 的 MIME 类型有两个目的:

    限制对服务器资源的访问。如果客户端请求 Web.config 文件,那么 IIS 当然应该阻止该请求,因为该文件可能包含密码等敏感信息。 跟踪如何处理每种文件类型。比如 HTML 文件一般应该只是发送,而 ASPX 文件需要先经过 ASP.Net 处理,然后再发送。

【讨论】:

现在更有意义了。我有一个问题,如果我只是将js文件包含在header中,现在浏览器会转到服务器并解析HTML,然后有一个与之关联的javascript,所以浏览器足够聪明,可以自己发出请求然后去到javascript? (抱歉我的无知,我只是想了解基本原理).. @UnderDog 确切地说,浏览器足够聪明,可以获取 Javascript。 HTML、Javascript、SVG 都是客户端技术;解析、处理和渲染它们是浏览器的工作。 好了,大部分疑惑都解开了。我想问的最后一件事是,IIS 在其中的作用,我的意思是,既然渲染/解析 HTML、javascript、svg 是浏览器的工作,如果我的浏览器支持 svg,那么为什么 IIS 需要单独的 mimetype。 IIS 是否充当客户端和服务器之间的中间人? @UnderDog 是的,我想你可以说 IIS 在这种情况下是一种中间人。这部分是出于安全考虑。请查看我的更新答案。

以上是关于为啥 IIS 需要声明 mime 类型?的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 假定 Mime 类型

IIS配置MIME类型

如果变量类型没有显式声明,为啥在以下情况下需要可选链接? [复制]

APK IPA --------------- iis7如何添加mime类型支持所有后缀名文件下载的方法(解决特殊后缀文件无法下载的问题)

如何在IIS添加MIME扩展类型

不支持视频格式或 MIME 类型。 IIS 确实具有正确的 MIME 类型。