Сначала немного:
Вы используете Access-Control-Allow-Headers
, который указывает, какие заголовки request позволяют клиенту разрешить отправить , но вы не указываете, какие заголовки response позволяют клиенту разрешить читать . Чтобы клиент мог читать непростые заголовки ответов, вам нужно использовать Access-Control-Expose-Headers
. На странице HTML5 Rocks CORS :
Во время запроса CORS метод
getResponseHeader()
может получить доступ только к простым заголовкам ответов. Простые заголовки ответов определяются следующим образом:
- Cache-Control
- Content-Language
- Content-Type
- Истекает
- Last-Modified
- Pragma
Если вы хотите, чтобы клиенты имели доступ к другим заголовкам, вы должны использовать заголовок
blockquote>Access-Control-Expose-Headers
. Значение этого заголовка представляет собой список заголовков ответов с разделителями-запятыми, которые вы хотите открыть клиенту.Итак, учитывая эту новую информацию, вы можете:
HttpContext.Current.Response.AddHeader("Access-Control-Expose-Headers", "Set-Cookie");
... но это еще не все.
Теперь, фактический ответ:
Здесь есть еще одна серьезная проблема: спецификация XHR явно запрещает чтение
Set-Cookie
.Предположим, что домен A выполняет междоменный запрос в домен B. Когда домен B устанавливает куки-файлы, он устанавливает доменную зону -специфические файлы cookie только для домена B . Любая попытка домена A для чтения файлов cookie домена B является нарушением политики одинакового происхождения для доступа к файлам cookie.
Я не знаю WCF, поэтому я не уверен в наилучшем способе на самом деле делают то, что вы хотите, но я бы предположил, что решение может состоять в том, чтобы передать токен аутентификации не через файлы cookie (например, заголовок
X-WCF-Auth
?), который домен A читает, а затем устанавливает свой собственный файл cookie.
Политики безопасности браузера могут блокировать ваш ответ, потому что вы не установили:
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials","true");
Если это не помогает, попробуйте добавить
xhrFields: { withCredentials: true }
к своему ajax
также могут быть полезны.