Nano Hash - криптовалюты, майнинг, программирование

IIS7: управление заголовками html-файлов в классическом режиме

Я использую директиву angular для извлечения html-файла с моего сервера в классическом режиме IIS7 (требуется классический из-за единого входа). Чтобы удовлетворить CORS, мне нужно прочитать ORGIN из запроса и добавить заголовок к ответу html-файла. Этот бит не имеет большого значения. Моя проблема заключается в том, чтобы подключить мой код, чтобы сделать это для статического HTML-файла.

Таким образом, в классическом режиме мои обработчики/модули определены в system.web, а не в system.webSever. Поэтому я не могу использовать флаг runAllManagedModulesForAllRequests="true", который не является частью схемы для system.web.

В system.web у меня есть:

<httpHandlers>
    <!--<add path="*.html" verb="GET,HEAD" type="System.Web.StaticFileHandler" />-->
    <add path="*.html" verb="GET,HEAD" type="My.Namespace.CrossOriginHandler, My.DLL.Name" />
    <add path="*" verb="*" type="System.Web.HttpNotFoundHandler" />
</httpHandlers>

<httpModules>
    <add name="CrossOriginModule" type="My.Namespace.CrossOriginModule, My.Dll.name" />
  </httpModules>

Это отлично работает для страниц MVC или вызовов webapi. Он не выполняется для моего статического файла HTML.

Я начинаю опасаться, что мне придется писать собственный фильтр ISAPI. Есть ли другой способ подключить мой код? Конфигурация, которую мне не хватает, или перехват между фильтром ISAPI и HttpModule?


Ответы:


1

У вас есть несколько вариантов, и определенно вам не нужно писать ISAPI для этого.

Один из вариантов, если вы можете установить его для всех вслепую, — просто использовать раздел httpProtocol для добавления заголовка:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

однако гораздо лучше использовать URL Rewrite для установки заголовков, сохраняя при этом полный контроль над проверкой источников и соответствующим образом переписывая их. Я написал небольшую статью о том, как это сделать, здесь: http://www.carlosag.net/articles/enable-cors-access-control-allow-origin.cshtml

На высоком уровне это означает добавление входящего правила перезаписи URL для захвата заголовка Origin и установки его в переменной сервера. Затем вы можете использовать эту серверную переменную позже в исходящем правиле, чтобы установить ее в заголовке. При желании я использовал карту перезаписи, чтобы указать происхождение, которое вы хотели разрешить.

    <outboundRules> 
        <rule name="Set-Access-Control-Allow-Origin for known origins"> 
            <match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern=".+" negate="true" /> 
            <conditions> 
                <add input="{AllowedOrigins:{CAPTURED_ORIGIN}}" pattern=".+" /> 
            </conditions> 
            <action type="Rewrite" value="{C:0}" /> 
        </rule> 
    </outboundRules> 

полное объяснение см. здесь: http://www.carlosag.net/articles/enable-cors-access-control-allow-origin.cshtml

12.11.2015
  • Я использовал ‹add name=Access-Control-Allow-Origin value=* /›, но как только код переместился в нашу среду SSO UAT, мне пришлось указать $httpProvider.defaults.withCredentials = true; что исключает использование подстановочного знака. Правило перезаписи выглядит как просто билет и могло бы избавить меня от многих проблем, если бы оно выполнялось даже для статического контента. У меня было много обручей, через которые нужно было пройти, и мне действительно нужно написать об этом в блоге, чтобы я не забыл об этом в следующий раз. 12.11.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..