XHRやfetchによるリクエスト時にpendingで固まることがある
-
・利用環境
Debian GNU/Linux 10:
Vivaldi 2.8.1664.40 (Stable channel) (64-bit)
変更履歴 3ceb1e00616d447249d27368e347561bc737a2e0Vivaldi 2.9.1675.11 (公式ビルド) snapshot (64-bit)
変更履歴 802bcf2c17d188383d36e2aa44b3ed61c82ec66cWindows 10 Pro OS Version 1903 (Build 18362.356):
Vivaldi 2.8.1664.36 (Stable channel) (64-bit)
変更履歴 04e08adbc523bce21f9c9c7cca054b6afaad1d52Vivaldi 2.8.1664.40 (Stable channel) (64-bit)
変更履歴 3ceb1e00616d447249d27368e347561bc737a2e0Vivaldi 2.9.1675.11 (公式ビルド) (64-bit)
変更履歴 802bcf2c17d188383d36e2aa44b3ed61c82ec66c・再現手順
https://gist.github.com/rayfill/f438eea3907f0861c54e1dfb4a9bed25
の2つのファイル、index.jsとindex.htmlを一つのディレクトリに置いて
$ nodejs index.js
でwebサーバを起動させるnodejs の動いているサーバをブラウザ側から web.example.com、cors.example.com で名前解決できるように(hostsファイルをいじるなど)しておく
VivaldiにTamperMonkeyとuBlock Origin拡張をインストール
Tamper Monkey 4.8.41 https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo
uBlock Origin 1.22.4 https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagmVivaldiで http://web.example.com:8080/ にアクセスしボタンをクリックする
・本来あるべき挙動
javascript経由でサーバへリクエストが行われ、alertが表示される・実際の挙動
ポタンを押すと http://web.example.com:8080/302 へアクセスし302レスポンスをもらって http://cors.example.com:8080/ へリダイレクトされる
しかしリダイレクト後のアクセスでステータスがpendingになり(devtoolで確認)結果が帰ってこなくなる(繰り返していると時々リダイレクト後のリクエストが通る)
こういった感じで302リダイレクト後のリクエストがpendingになります・補足情報
google chromeのstable最新版(windows 10、Version 77.0.3865.90 (Official Build) (64-bit))に同extensionで環境を揃えてもpendingは発生しませんでしたnodejsによるサーバは最小環境構築のためです。
xhrまたはfetchで同ドメインにリクエスト -> 302でAcess-Control-Allow-Origin: *されたサーバにリダイレクトという場合にpendingで無限ブロックされる環境を整えるための最小サンプルとして用意しただけなので実際に2つのサーバを用意しても発生するはずです(実際にこういった構成で運用されているサイトでTamperMonkeyでユーザスクリプトを書いてて発見したので) -
@rayfill ご報告ありがとうございます!社内にて再現しました。次回のスナップショットにて修正が入る見込みです。
-
@rayfill 新しいスナップショット2.9.1692.4を公開しました。よろしければ、お試しください
-
@Takaaki snapshotでちゃんと動作するのを確認しました
素早い対応ありがとうございました!! -
@rayfill よかったです!ご確認ありがとうございます