为什么IIS需要声明mime类型?

5

在我的一次任务中,我试图渲染一个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个回答

7
当你的浏览器访问一个URL时,它最初只会下载HTML文件。对于每个链接的文件(Javascript、图片、CSS、SVG等),浏览器将向服务器发出单独的请求。正如你所注意到的那样,除非IIS识别MIME类型,否则它不会提供这些文件。
回答你的问题,不,它并不是这样工作的。IIS不会“扫描”HTML文件,它只是被动地响应客户端(浏览器)的请求。浏览器解析HTML和Javascript,并执行Javascript,根据需要为链接资源进行额外的往返服务器请求。
编辑
IIS的MIME类型有两个目的:
1.限制对服务器资源的访问。如果客户端请求Web.config文件,当然IIS应该阻止该请求,因为该文件可能包含敏感信息,例如密码。
2.跟踪如何处理每种文件类型。例如,通常应该只发送HTML文件,但ASPX文件需要首先由ASP.Net处理,然后再发送。

现在更有意义了。我有一个问题,如果我只在头部包含js文件,那么浏览器会去服务器解析HTML,然后与之相关的javascript,所以浏览器足够聪明,可以自己发出请求并转到javascript吗?(对不起我的无知,我只是想理解底层原理)。 - SandBag_1996
1
@UnderDog 没错,浏览器足够聪明,可以获取JavaScript。HTML、JavaScript和SVG都是客户端技术;浏览器的工作是解析、处理和渲染它们。 - McGarnagle
好的,这解决了大部分疑问。我最后想问的是,IIS在其中扮演的角色是什么?我的意思是,既然浏览器负责呈现/解析HTML、JavaScript、SVG,如果我的浏览器支持SVG,那么为什么IIS需要单独的MIME类型呢?IIS是否充当客户端和服务器之间的中间人? - SandBag_1996
1
@UnderDog 是的,我想你可以说 IIS 在这种情况下有点像中间人。这在一定程度上是出于安全考虑。请查看我的更新答案。 - McGarnagle

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