Я занимался проблемой CORS пару дней назад, когда мне нужно поддерживать несколько истоков. Я провел некоторое исследование и нашел пару сообщений, указывающих мне на этот отличный инструмент (URL Rewrite). Я получил решение, которое я хотел бы получить после использования Paco Zarate здесь: Доступ с правами на доступ с несколькими доменами с использованием URL Rewrite. Я также нашел здесь еще одну запись: http://www.carlosag.net/articles/enable-cors-access-control-allow-origin.cshtml, показывающий, как достичь такого же решения с помощью другого способа настройки в URL Rewrite.
Решение Paco Zarate работает как шарм. Почему я все еще задаю вопрос? Это просто для учебных целей. И также я думаю, что вторая конфигурация сообщения дает более элегантный список истоков/доменов, которые я хочу перечислить в белый список. Для удобства обслуживания я могу просто перейти на Rewrite Maps и увидеть все мои AllowedOrigins.
При попытке решения второй почты я получил это сообщение: ERR_CONNECTION_RESET на вкладке Консоль средства отладчика браузера. И заголовок запроса на вкладке "Сеть" говорит: "Предварительные заголовки показаны"
Большое спасибо заранее.
Мой конфигурационный файл:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Detailed" />
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="Origin, Content-Type, Accept" />
<add name="Access-Control-Request-Method" value="POST" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Origin" value="http://localhost:8080" />
</customHeaders>
</httpProtocol>
<rewrite>
<rules>
<rule name="Capture Origin Header">
<match url=".*" />
<conditions>
<add input="{HTTP_ORIGIN}" pattern=".+" />
</conditions>
<serverVariables>
<set name="CAPTURED_ORIGIN" value="{C:0}" />
</serverVariables>
<action type="None" />
</rule>
<rule name="Preflight Options" enabled="false" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^OPTIONS$" />
</conditions>
<action type="CustomResponse" statusCode="200" statusReason="Preflight" statusDescription="Preflight" />
</rule>
</rules>
<rewriteMaps>
<rewriteMap name="AllowedOrigins">
<add key="http://somedomain:8080" value="http://localhost:8080" />
</rewriteMap>
</rewriteMaps>
<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>
</rewrite>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Rewrite" verbosity="Verbose" />
</traceAreas>
<failureDefinitions timeTaken="00:00:00" statusCodes="500" verbosity="Error" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>