如何在 IIS 中提供静态文件(用于 CORS / OPTION 请求)?
Posted
技术标签:
【中文标题】如何在 IIS 中提供静态文件(用于 CORS / OPTION 请求)?【英文标题】:How to serve static files (for CORS / OPTION request) in IIS? 【发布时间】:2015-03-27 20:09:54 【问题描述】:我有一个 AngularJS 应用程序,我正在尝试使用 AJAX 请求从在 IIS 8.5 上运行的 ASP.NET WebApi2 应用程序中提取静态文件。类似于下面的例子-
ng-include="http://server/Content/icon.svg"
如果我在浏览器中导航到该 URL,IIS 很乐意将该文件作为静态文件提供。但是,当我使用 AJAX 请求时,Angular 会首先尝试 OPTIONS 请求,因为它是 CORS 请求,并且 IIS 会抛出 405 Method Not Allowed。
我已尝试将这些标头添加到网站的静态内容文件夹中-
然而这并没有什么不同。此外,IIS 服务器没有安装 WebDAV,这是我看到的可能导致问题的东西。
【问题讨论】:
【参考方案1】:我有一个带有虚拟目录的 IIS 站点,我从该目录中提供静态文件。
为了从浏览器执行 CORS,我所做的是配置站点的“En tetes de réponses HTTP”,英文应该类似于“HTTP Response Headers”。
在那里我添加了一个名为“Access-Control-Allow-Origin”的新标头,其值为“*”。
从现在开始,我可以在 XHR 中使用静态文件了。
我的实际问题是将 OpenStreetMap 瓷砖提供给文件:///c/xxx/index.html,而 chrome 中的错误是
来自“http://myhost”的图像已被跨域资源共享策略阻止加载:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'null'。
【讨论】:
【参考方案2】:这适用于我在表单身份验证下访问子目录中的 .png 文件。您应该可以更改扩展名。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".*" mimeType="image/png" />
</staticContent>
<handlers>
<clear />
<add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" requireAccess="Read" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
</handlers>
</system.webServer>
</configuration>
如果您将OPTIONS
添加为Access-Control-Allow-Methods
的动词会怎样,正如this 问题中所回答的那样。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
</system.webServer>
【讨论】:
可能你需要为此实现一个自定义的 http 处理程序。也许这个网址很有用:***.com/questions/24131711/… 是的,尝试了其他方法,但也没有用 不需要允许 PUT、POST、DELETE 方法。请参阅我的答案以获得解释【参考方案3】:如果您想在没有任何授权的情况下将静态文件提供给公共互联网,您可以将您的 CORS 策略设置为:
允许 GET 请求 来自任何来源 允许所有请求标头 允许将 OPTIONS 回复缓存 24 小时Internet 信息服务器可以使用以下 IIS 配置为您的站点进行配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="GET,OPTIONS" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Max-Age" value="86400" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
【讨论】:
以上是关于如何在 IIS 中提供静态文件(用于 CORS / OPTION 请求)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 10 的 IIS 管理器上启用 CORS?
使用 IIS ApplicationInitialization remapManagedRequestsTo 功能时返回用于提供静态 html 的自定义响应代码?