У меня есть приложение Angular2 (2.0.1), которое вызывает API-интерфейс ReST на бэкэнд-приложении Джерси. В Internet Explorer 11 проблема заключается в том, что запросы DELETE выполняются правильно, но обратный вызов не выполняется немедленно. Только через 120 секунд (я думаю, какой-то тайм-аут) вызывающий вызов вызван. На сетевом уровне я вижу немедленный ответ, поэтому, я думаю, проблема заключается либо в IE, либо в HTTP-библиотеке Angular2, вероятно, только в случае ответа «204 Нет содержимого».XMLHttpRequest не завершает запрос DELETE через прокси-сервер в IE11
[Изменить]: Также запросы GET ведут себя таким образом в случае пустого ответа со статусом 204.
Как вы можете видеть в инструментах разработчика, запрос находится на рассмотрении в течение некоторого времени:
Через 120 секунд запрос завершен. В это время функция обратного вызова вызывается:
Обратите внимание, что это происходит только если бэкенд API доступен через наш корпоративный прокси-сервер, и только на IE 11.
Вызов запускается следующим образом:
doDelete(id: string) {
this.http.delete(this.deleteUrl + id)
.subscribe(
data => { this.ngOnInit(); },
error => { window.alert(error) });
}
Здесь трассировка сети:
DELETE http://yyy.yyy.at/types/76856ad1-342c-41d0-a627-71cd02d586a8 HTTP/1.1
Accept: */*
authorization: Bearer b50cd05c-0314-4557-aa66-cf9c9f356e31
Referer: http://yyy.yyy.at/types
Accept-Language: de-AT
Origin: http://yyy.yyy.at
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Length: 0
Host: yyy.yyy.at
Proxy-Connection: Keep-Alive
Pragma: no-cache
HTTP/1.0 204 No Content
Date: Fri, 07 Oct 2016 06:54:45 GMT
Server: Apache-Coyote/1.1
Cache-Control: no-cache
Access-Control-Allow-Origin: http://yyy.yyy.at
Access-Control-Allow-Credentials: true
Set-Cookie: 9047e7349d0e3de4224ae4053da5d560=b44c49344740b5a0b58b8fdd51b15bdc; path=/; HttpOnly
X-Cache: MISS from xxx.xxx.net
X-Cache-Lookup: MISS from xxx.xxx.net:8080
X-Cache: MISS from xxx.xxx.at
X-Cache-Lookup: MISS from xxx.xxx.at:8080
Via: 1.1 PSxxx, 1.1 xxx.xxx.net:8080 (squid/2.7.STABLE9), 1.0 xxx.xxx.at:8080 (squid/2.7.STABLE9)
Connection: keep-alive
Proxy-Connection: keep-alive
Обходной путь, который я нашел, - ответить кодом 200 вместо 204 и установить «Content-Length: 0». – Black