Это не фактический ответ на вопрос.
следовал довольно простой сайт, который обслуживает данные и обрабатывает некоторые сокетные соединения. Это работает NodeJS позади IIS, используя iisnode как мост. Это все работает нормально с точки зрения "обслуживать нормальные страницы".
Частично проблема заключается в том, что фактические подключения к серверу исходят от настольных клиентов, где контент загружается через другое приложение в виде гаджета, а также от потенциально изменяющихся и меняющихся частей сети, мобильных устройств и т. Д., Т. Е. неизвестное количество клиентских доменов.
Я уже установил Access-Control-Allow origin на *, чтобы просто открыть двери сарая, но теперь получаю следующую ошибку в клиенте:
11: 29: 57.668 Запрос перекрестного источника заблокирован: одна и та же политика происхождения запрещает чтение удаленного ресурса в ‘HTTP: //server/socket.io/ EIO = 3 & транспорт = опроса и т = 1486150196479-0». (Причина: учетные данные не поддерживаются, если заголовок CORS ‘Access-Control-Allow-Origin’ равен ‘*’). 1 (неизвестно)
Я пытался явно установить для Access-Control-Allow-Credentials значение false (равно как и true, а также полностью исключить его), но ни одна из моих попыток не позволила мне преодолеть это.
В настоящее время необработанные заголовки ответа выглядят так:
Access-Control-Allow-Credentials: false
Access-Control-Allow-Headers: Origin,Content-Type,Accept
Access-Control-Allow-Methods: GET,HEAD,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Content-Encoding: gzip
Content-Length: 969
Content-Type: text/html
Date: Fri, 03 Feb 2017 19:30:21 GMT
Server: Microsoft-IIS/8.5
Vary: Accept-Encoding
X-Powered-By: ASP.NET
Похоже, я не могу разобраться после просмотра МНОГО сайтов и статей CORS за последние несколько дней, почему он все еще жалуется на учетные данные - и, более конкретно, как мне обойти это?
Спасибо!
ОБНОВЛЕНИЕ 2017-02-06
Код клиента не очень захватывающий. Так как сервер находится за IIS позади IIS, все, что я действительно делаю для этого, реализует соединение через сокет:
var socket = io('http://' + currentServer, {path: '/broadcast/socket.io', reconnection: false, forceNew: true});
socket.on('update message', function (data) {
// do some fancy things
}
Это работает из одного домена.
Я также делал еще кое-какие раскопки, основываясь на комментариях SideShowBarker, которые привели меня к этомустатья Есть несколько дополнительных шагов, чтобы добавить переменные, и некоторые другие вещи, чтобы заставить этот кусок работать.
Мой applicationHost.config в настоящее время содержит этот раздел:
<location path="Default Web Site">
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="CAPTURED_ORIGIN" />
<add name="RESPONSE_Access-Control-Allow-Origin" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</location>
и мой web.config здесь:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Fail bad requests">
<match url="." />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="localhost" />
</conditions>
<action type="AbortRequest" />
</rule>
<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>
</rules>
<outboundRules>
<rule name="Set-Access-Control-Allow-Origin for known origins">
<match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern=".+" negate="true" />
<!--<action type="Rewrite" value="{C:0}" /> -->
</rule>
</outboundRules>
</rewrite>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server," areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="400-599" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>
в outboundRules у меня в настоящее время есть строка закомментированного действия type = "Rewrite", потому что, когда я включаю это, он выдает ошибку
HTTP Error 500.52 - URL Rewrite Module Error.
The page cannot be displayed because an internal server error has occurred.
Most likely causes:
•IIS received the request; however, an internal error occurred during the processing of the request. The root cause of this error depends on which module handles the request and what was happening in the worker process when this error occurred.
•IIS was not able to access the web.config file for the Web site or application. This can occur if the NTFS permissions are set incorrectly.
•IIS was not able to process configuration for the Web site or application.
•The authenticated user does not have permission to use this DLL.
•The request is mapped to a managed handler but the .NET Extensibility Feature is not installed.
Detailed Error Information:
Module: RewriteModule
Notification: SendResponse
Handler: StaticFile
Error Code: 0x80070585
Requested URL: http://localhost:80/iisstart.htm
Physical Path: C:\inetpub\wwwroot\iisstart.htm
Logon Method: Anonymous
Logon User: Anonymous
Request Tracing Directory: C:\inetpub\logs\FailedReqLogFiles
Журналы с ошибочными запросами не слишком полезны, они показывают следующее для предупреждения:
411. -MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName: RewriteModule
Notification: SEND_RESPONSE
HttpStatus: 500
HttpReason: URL Rewrite Module Error.
HttpSubStatus: 52
ErrorCode: Invalid index. (0x80070585)
ConfigExceptionInfo: