2017-09-14 1 views
19

私はChromeのみで起こった超変な問題で、最近苦労してきた:私のAPI(NodeJSは)別のサブドメイン上にあるように、私は私の正面からそれに到達するためにCORSを使用する必要があります-end(EmberJS)。スーパースロープリフライトオプションのみ

それはかなりうまく働いているが、私は非常に頻繁に(時間の95%)です非常に非常に遅いOPTIONSクエリを持つ、約3秒によって任意のAPI呼び出しを遅らせます。

2 requests, OPTIONS takes 3 seconds

この時間のほとんどは、空のコンテンツダウンロードを費やされている:

Downloading an empty content takes 3 seconds

を私は経験して、私たちは同様のアーキテクチャを使用して作られた他のウェブサイト上でこれをしようとしているとき、それも奇妙取得まったく同じ問題。

いくつか他のものは、私が試した:

  • は、私は、FirefoxとSafariでこれをしようとしてきた、と任意の遅延を取得できませんでした。
  • 私はこれをローカルまたはプロダクションで試して、同じ遅延を試してみました。
  • シークレットモード(拡張子なし)でこれを試していますが、私はまったく同じ問題を抱えています。

我々はCORS packageとバックエンドNodeJSに使用しています。問題は、クロム60、NodeJS、CORSパッケージまたはEmberJS + jQueryのいずれかである場合

は今、私は考えています。

誰もがあまりにもこれを経験しましたか?ただ、ノートとして

+1

たぶん、あなたは 'curl'または一部REST-とマニュアル' OPTIONS'要求を行うことができますテスターはレシートのようですか?また、Firefoxで 'OPTIONS'リクエストがない、あるいは' OPTIONS'リクエストが速いことを意味しますか? – Lux

+0

@Lux私は、郵便配達員と一緒にOPTIONSリクエストを再生しようとしましたが、待ち時間は経験しませんでした。 FirefoxはOPTIONSリクエストを行いますが、遅くはありません。 –

+1

私は少し奇妙に聞こえるかもしれませんが、これはhttpプロキシを経由しています。私はエイバーコードを呼び出すとapiはhttpプロキシを経由するのですか? – vaibhav

答えて

4

私が独自のドメインで

https://domain1.com --> https://domain1.com (No CORS, no delay) 
https://domain2.com --> https://domain1.com (CORS, delay) 

chrome cors

をサービスを使用して2人のDNS名でサーバーを使用して問題を再現クロームのバグに

ですこれはまったく同じサービスで、2つの名前に対応しているので、同じリクエスト、クライアントとサーバーのコードを正確にテストしています(DNS名は互換性があります)

> DELAY
  • クローム62.0.3202.84(アンドロイド) - - > DELAY
  • クローム62.0.3202.84(iOSの-のIpad) -

    • クローム61.0.3163.100(Windowsの場合)でテストされて

      > OK!

    • のFirefox - > OK
    • エッジ - > OK

    回避策(私の場合)。同じ起源のDNSに対応し、私はこれをデバッグしようとしてきたと我々は同じ問題を経験していたとして、クロムのバグように見えるCORS

  • +0

    バックエンドとは何ですか? –

    +0

    Apache + Tomcat(java 7) – pedrofb

    2

    を避けるために、私のホストでプロキシを作成します。私はそれを調査して半日過ごし、それ以上の開発者を停止助けるためにここにこれを追加しているCORS pre-flight and subsequent requests are very slow only on Chrome

    を;)ここでは、よりから、我々として更新します:

    は参考のために、私はここでクロムにバグレポートを提出しましたクロム。バグレポートの

    の概要は次のとおりです。

    のUserAgent:

    1. が持つapp.domain.com
    2. Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

      ステップ

      は、問題を再現しますLisトン項目
    3. api.domain.com
    4. は、デベロッパーツールでアクセス
    5. 確認応答を可能にするオプションが表示され、リクエストが期待されている何が300ms +

    まで取っている取得するためのAPIでCORSを有効にあり動作?

    応答タイミングは正確でなければなりません。

    何が問題になりましたか?

    我々は囲碁microservicesを使用し、ブラウザ間で所要時間に大きな格差に気づいている - クロムは、100倍の大きさまでの最も遅いもの。

    バックエンドからのタイミングを確認した場合、応答は最大10ms、ほとんどが1msです。 devtoolsの下でタイミングをチェックするとき、同じ応答が〜100ms〜1sで来ていました。

    以前にこの機能を使用しましたか?

    N/

    Chromeバージョン:63.0.3239.132チャンネル:安定 OSバージョン:10.0 のFlashのバージョン:Firefoxので

    (および他のブラウザ)、まったく同じ要求は〜で返します予想通り1-20ms。

    TelerikのFiddlerを使用して実際のネットワーク応答時間を確認し、予測されたタイミングでChromeが送受信していることを確認しました。唯一の結論は、Chromeの内部でこれらのリクエストの処理が遅くなっていることです。

    我々は、関連漠然と思えた目撃二つのオプションですchrome://flags#out-of-blink-corschrome://flags#enable-site-per-processのすべての順列を、試してみました。何も助けに見えなかった。

    は、我々はまた、クロームのバグであることの言及して同様の問題についての多くのスタックオーバーフローの記事を発見したが、私はそれがここで報告見つけることができませんでした:

    私達はちょうどMacOSでChromeをテストしてみたし、問題であるようには見えない - ので、Windowsに限定することができます。

    クローム: optionsChrome getChrome

    エッジ: optionsEdge getEdge

    のFirefox: optionsFirefox getFirefox

    +1

    このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](/レビュー/低品質の投稿/ 18561203) –

    関連する問題