Angular XMLHttpRequest在IE11中未通过代理终止删除请求

Angular XMLHttpRequest在IE11中未通过代理终止删除请求,angular,typescript,internet-explorer-11,http-proxy,Angular,Typescript,Internet Explorer 11,Http Proxy,我有一个Angular2(2.0.1)应用程序,它在Jersey后端应用程序上调用RESTAPI。在Internet Explorer 11上,问题是删除请求执行正确,但回调不会立即执行。只有在120秒(我猜是超时)之后才会调用回调。在网络级别上,我可以看到即时响应,因此我猜问题要么在IE中,要么在Angular2 http库中,可能只有在“204无内容”回复的情况下才会出现 [编辑]:如果响应为空且状态为204,GET请求也会以这种方式运行 正如您在开发人员工具中看到的,该请求已挂起一段时间:

我有一个Angular2(2.0.1)应用程序,它在Jersey后端应用程序上调用RESTAPI。在Internet Explorer 11上,问题是删除请求执行正确,但回调不会立即执行。只有在120秒(我猜是超时)之后才会调用回调。在网络级别上,我可以看到即时响应,因此我猜问题要么在IE中,要么在Angular2 http库中,可能只有在“204无内容”回复的情况下才会出现

[编辑]:如果响应为空且状态为204,GET请求也会以这种方式运行

正如您在开发人员工具中看到的,该请求已挂起一段时间:

120秒后,请求完成。此时将调用回调函数:

注意,只有通过我们的公司代理访问后端API,并且只有在IE11上,才会发生这种情况

该呼叫按如下方式触发:

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

InternetExplorer11也为我做了这件事,但是努力确保
内容长度设置为0为我修复了它,即使使用HTTP 204作为响应代码

如果其他人遇到此问题,查看Internet Explorer中是否存在超时问题的最简单方法是在IE(错误地)等待数据时中断/重新启动API服务器。因为中断将终止TCP连接,IE将检查它拥有的数据并尝试使其到期——毕竟,状态代码表示成功,并且由于实际上不应该有任何内容,因此您的代码可能仍能工作


在我的例子中,超时发生在大约60秒之后,但这可能是因为我的AWS弹性负载平衡器配置将空闲连接保持打开那么长时间。

我发现的一个解决方法是使用代码200而不是204进行回复,并设置“内容长度:0”。