リグレッション Service Worker が fetch イベントハンドラーなしに使われた場合にクロスサイト XMLHttpRequest がブロックされてしまいます

公開日: | カテゴリー: DOM, ネットワーキング

概要

Firefox 44 で、XMLHttpRequest と Service Worker に関するリグレッションが発生しました。サイトが Service Worker を導入していて、その中で fetch イベント の処理が行われていない場合に クロスサイト HTTP リクエスト が正しく動作しません。この問題が発生すると、GET リクエストに Origin ヘッダーが欠落し、結果として不要なプレフライト OPTIONS リクエストが行われ、それに失敗した GET リクエストが続きます。このバグは Firefox 45 で修正されました。Firefox 44 のための回避策は、次のようにシンプルなイベントリスナーを Worker コードに追加することです。

self.addEventListener('fetch', function(event) {
  event.respondWith(fetch(event.request));
});

更新: バグのコメントに応じて、Service Worker API を伴う状況について明確にし、回避策を追加しました。

参考資料