IE11 по какой-то причине отклоняет запрос PUT, но только при использовании https. Мне очень трудно найти проблему, поскольку использование http, localhost и других браузеров прекрасно работает.IE11 CORS отклоняет ВАРИАНТЫ на https
Консоль показывает две ошибки
SEC7124: Request method PUT was not present in the Access-Control-Allow-Methods list.
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
запрос OPTION передаваемое из браузера
Accept: */*
Accept-Encoding: gzip, deflate
Access-Control-Request-Headers: accept, content-type, session-id
Access-Control-Request-Method: PUT
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 0
Host: api.domain.com
Origin: https://portal.domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
и ответ от сервера следующее: используется
X-Powered-By: Servlet/2.5
Server: server
Content-Encoding: gzip
Access-Control-Expose-Headers: Session-Id
Access-Control-Allow-Origin: *
Access-Control-Max-Age: -1
Allow: OPTIONS,GET,HEAD,PUT
Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: accept, origin, Content-Type, session-id, authorization, portal-url
Content-Type: application/vnd.sun.wadl+xml
Content-Length: 352
Date: Tue, 19 Jan 2016 15:33:38 GMT
AngularJS на клиентской стороне используется стандарт $ http PUT. Java с джерси используются на стороне сервера и запрос фильтр для обработки CORS является следующим:
public ContainerResponse filter(final ContainerRequest request, final ContainerResponse response)
{
if (request.getHeaderValue("Origin") != null)
{
final MultivaluedMap<String, Object> headers = response.getHttpHeaders();
headers.add("Access-Control-Allow-Origin", "*");
headers.add("Access-Control-Expose-Headers", "Session-Id");
headers.add("Access-Control-Allow-Credentials", Boolean.TRUE.toString());
}
if ("OPTIONS".equals(request.getMethod()))
{
final MultivaluedMap<String, Object> headers = response.getHttpHeaders();
for (String method : ["OPTIONS", "GET", "POST", "PUT", "DELETE"])
{
headers.add("Access-Control-Allow-Methods", method);
}
headers.add("Access-Control-Allow-Headers",
"accept, origin, Content-Type, session-id, authorization, portal-url, "
+ "If-Modified-Since, Cache-Control, Pragma");
headers.add("Access-Control-Max-Age", "-1");
}
return response;
}
Может быть, вы можете увидеть, что может быть не так с этим.
Thanks
Попробуйте установить фактическое происхождение, а не '*' – charlietfl
Проверьте наличие ошибок в консоли IE (F12, чтобы открыть devtools). Должно быть сообщение, описывающее, почему браузер отклонил запрос. Из головы - разрешить учетные данные = true должно сопровождаться возникновением не-звездочки. –
@ Сообщение об ошибке OlegEstekhin находится прямо у вопроса OP – charlietfl