2016-10-07 19 views
0

私はJerseyバックエンドアプリケーションでReST APIを呼び出すAngular2(2.0.1)アプリケーションを持っています。 Internet Explorer 11では、DELETE要求は正しく実行されますが、コールバックはすぐに実行されないという問題があります。 120秒後に(私はタイムアウトと思う)、コールバックが呼び出されます。ネットワークレベルでは、私は即座の応答を見ることができるので、おそらく "204 No Content"の応答の場合にのみ、問題はIEまたはAngular2 httpライブラリにあると思います。XMLHttpRequestはIE11のプロキシ経由でDELETE要求で終了しません

[編集]また、GET要求は、204のステータスの空の応答の場合にこのように動作します。

あなたが開発者向けツールで見ることができるように、要求は、いくつかの時間のために保留されている:要求が完了した120秒後 Pending state

。この時間のコールバック関数が呼び出された時:これはバックエンドAPIが当社の企業プロキシ経由でアクセスされた場合にのみ発生していること Finished after 120 seconds

注意、およびだけ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 
+0

私が見つけた回避策は、204の代わりに200のコードで返信し、 "Content-Length:0"を設定することです。 – Black

答えて

0

のInternet Explorer 11には、あまりにも、私のためにこれをしなかったが、熱心SURを作ります応答コードとしてHTTP 204を使用していても、Content-Lengthが0に設定されていると私に固定されていました。

誰かがこの問題を経験した場合、Internet Explorerでタイムアウトの問題であるかどうかを確認する最も簡単な方法は、IEが(間違って)データを待つ間に、APIサーバーを中断/再起動することです。中断によってTCP接続が終了するため、IEはデータが何であるかを検査し、期限を守ろうとします。ステータスコードには成功したと表示され、実際にコンテンツは存在しないため、コードとにかくうまくいくでしょう。

私の場合、タイムアウトは約60秒後に発生しましたが、これはAWS Elastic LoadBalancerの設定が原因でアイドル状態の接続が長く開いている可能性があります。

関連する問題