Я разрабатываю одностраничное приложение, используя Angular. Бэкэнд предоставляет услуги REST, которые требуют базовой аутентификации. Получение index.html или любого из скриптов не требует аутентификации.
У меня странная ситуация, когда одно из моих представлений имеет <img>
, где src
- это URL-адрес REST API, для которого требуется аутентификация. <img>
обрабатывается браузером, и у меня нет возможности установить заголовок авторизации для запроса GET, который он делает. Это заставляет браузер запрашивать учетные данные.
Я попытался исправить это, выполнив следующее:
- Оставьте
img
src
пустым в источнике - В "готовом документе" введите
XMLHttpRequest
в службу (/api/login
) с заголовком авторизации, чтобы вызвать аутентификацию. - По завершении этого вызова установите атрибут
img src
, думая, что к тому моменту браузер узнает, что он будет включать заголовок авторизации в последующих запросах...
... но это не так. Запрос изображения исчезает без заголовков. Если я введу учетные данные, то все остальные изображения на странице верны.
(Я также пробовал и Angular ng-src
, но это дало тот же результат)
У меня есть два вопроса:
- Почему браузер (IE10) не включил заголовки во все запросы после успешного
XMLHttpRequest
? - Что я могу сделать, чтобы обойти эту проблему?
@bergi попросил детали запросов. Вот они.
Запрос/api/login
GET https://myserver/dev30281_WebServices/api/login HTTP/1.1
Accept: */*
Authorization: Basic <header here>
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)
Connection: Keep-Alive
Ответ (/api/login)
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 4
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 20 Dec 2013 14:44:52 GMT
Запрос/пользователь/картинка/2218:
GET https://myserver/dev30281_WebServices/api/user/picture/2218 HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)
Connection: Keep-Alive
И затем веб-браузер запрашивает учетные данные. Если я введу их, я получаю этот ответ:
HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Length: 3119
Content-Type: image/png
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 20 Dec 2013 14:50:17 GMT