【问题标题】:How to serve static files (for CORS / OPTION request) in IIS?如何在 IIS 中提供静态文件(用于 CORS / OPTION 请求)?
【发布时间】: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,这是我看到的可能导致问题的东西。

【问题讨论】:

    标签: angularjs iis cors asp.net-web-api2 iis-8.5


    【解决方案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 处理程序。也许这个网址很有用:stackoverflow.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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-29
        • 2021-03-16
        • 2020-01-29
        • 2020-05-10
        • 1970-01-01
        • 2014-06-09
        • 2021-05-03
        • 2021-12-09
        相关资源
        最近更新 更多