Как обслуживать статические файлы (для запроса CORS/OPTION) в IIS?

У меня есть приложение AngularJS, в котором я пытаюсь использовать запрос AJAX для извлечения статического файла из приложения ASP.NET WebApi2, работающего на IIS 8.5. Аналогично приведенному ниже примеру

ng-include="http://server/Content/icon.svg"

Если я перейду по этому URL-адресу в браузере, IIS с радостью обработает этот файл как статический файл. Однако, когда я использую запрос AJAX, Angular сначала пытается выполнить запрос OPTIONS, поскольку это запрос CORS, а IIS выдает метод 405 Not Allowed.

Я попытался добавить эти заголовки в папку статического содержимого на веб-сайте.

Заголовки

Однако это не имело значения. Кроме того, на сервере IIS не установлен WebDAV, что, как я видел, может вызвать проблемы.


person thebringking    schedule 28.01.2015    source источник


Ответы (3)


У меня был сайт IIS с виртуальным каталогом, из которого я обслуживаю свои статические файлы.

Чтобы выполнить CORS из браузера, я настроил «En tetes de réponses HTTP» сайта, что на английском языке должно быть чем-то вроде «HTTP Response Headers».

Там я добавил новый заголовок «Access-Control-Allow-Origin» со значением «*».

С этого момента я могу использовать статические файлы в XHR.

Моя реальная проблема заключалась в том, чтобы отдавать плитки OpenStreetMap в файл:///c/xxx/index.html, и ошибка в хроме была

Изображение из источника 'http://myhost' заблокировано от загрузки политикой общего доступа к ресурсам между источниками: Нет 'Access-Control- Заголовок Allow-Origin присутствует в запрошенном ресурсе. Таким образом, Origin 'null' не имеет доступа.

person Christophe Blin    schedule 12.06.2015

Это работает для меня для доступа к файлам .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 Как указано в вопрос.

 <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>
person Ross Bush    schedule 28.01.2015
comment
Возможно, для этого вам потребуется реализовать собственный обработчик http. Может быть, этот URL-адрес полезен: stackoverflow.com /вопросы/24131711/ - person Ross Bush; 28.01.2015
comment
Да и другие способы пробовали, тоже не помогло - person thebringking; 28.01.2015
comment
Не нужно разрешать методы PUT, POST, DELETE. Смотрите мой ответ для объяснений - person Henrik Høyer; 02.07.2020

Если вы хотите предоставлять статические файлы в общедоступный Интернет без какой-либо авторизации, вы можете установить для своей политики CORS следующее:

  • Разрешить GET-запрос
  • Из любого происхождения
  • Разрешить все заголовки запросов
  • Разрешить кеширование ответа OPTIONS на 24 часа

Интернет-информационный сервер можно настроить с помощью следующей конфигурации 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>
person Henrik Høyer    schedule 02.07.2020