3

我有一个 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,这是我看到的可能导致问题的东西。

4

3 回答 3

2

我有一个带有虚拟目录的 IIS 站点,我从中提供静态文件。

为了从浏览器执行 CORS,我所做的是配置站点的“En tetes de réponses HTTP”,英文应该类似于“HTTP Response Headers”。

在那里,我添加了一个名为“Access-Control-Allow-Origin”的新标头,其值为“*”。

从这一刻起,我可以在 XHR 中使用静态文件了。

我的实际问题是将 OpenStreetMap 瓷砖提供给 file:///c/xxx/index.html 并且 chrome 中的错误是

来自“ http://myhost ”的图像已被跨域资源共享策略阻止加载:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。

于 2015-06-12T06:47:21.197 回答
1

这适用于我在表单身份验证下访问子目录中的 .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>

如果您将此问题中回答的 As添加OPTIONS为动词会怎样。Access-Control-Allow-Methods

 <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>
于 2015-01-28T19:28:51.877 回答
0

如果你想在没有任何授权的情况下将静态文件提供给公共互联网,你可以将你的 CORS 策略设置为:

  • 允许 GET 请求
  • 从任何来源
  • 允许所有请求标头
  • 允许将 OPTIONS 回复缓存 24 小时

Internet Information Server 这可以为您的站点使用以下 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>
于 2020-07-02T08:42:42.930 回答