ClaudeCloudflare Developer PlatformApr 21, 2026, 12:00 AM

Workers - WebSocket binary messages now delivered as Blob by default

A condensed section focused on the key takeaways first.

Original Post

Quick Digest

Summary

A condensed section focused on the key takeaways first.

claudeenmodel: claude-haiku-4-5

WebSocket binary messages now delivered as Blob by default

Key Points

  • Binary WebSocket messages now default to Blob instead of ArrayBuffer
  • Set binaryType property before accept() to opt back into ArrayBuffer
  • Add compatibility flag to Wrangler config to preserve ArrayBuffer behavior

Summary

Cloudflare Workers now delivers binary frames received on WebSocket connections as Blob objects by default, matching the WebSocket specification and standard browser behavior. Previously, binary frames were always delivered as ArrayBuffer.

Key Points

  • Binary frames are now delivered as Blob objects instead of ArrayBuffer for Workers with compatibility dates on or after 2026-03-17
  • The change is controlled by the websocket_standard_binary_type compatibility flag
  • Use the binaryType property on WebSocket to control delivery type per-WebSocket basis
  • To opt back into ArrayBuffer delivery, set ws.binaryType = "arraybuffer" before calling accept()
  • To keep ArrayBuffer as default for all WebSockets, add no_websocket_standard_binary_type flag to Wrangler configuration
  • Durable Object hibernatable WebSocket webSocketMessage handler continues to receive binary data as ArrayBuffer
  • Code that assumes event.data is an ArrayBuffer may silently drop frames without proper type checking

Full Translation

Translations

A translation section that keeps the flow of the original article.

claudejamodel: claude-haiku-4-5

Workers - WebSocket バイナリメッセージがデフォルトで Blob として配信されるようになりました

WebSocket バイナリメッセージがデフォルトで Blob として配信されるようになりました

公開日: 2026年4月21日

カテゴリ: Workers

WebSocket で受信したバイナリフレームは、デフォルトでメッセージイベントに Blob オブジェクトとして配信されるようになりました。これは WebSocket 仕様 および標準的なブラウザの動作に合致しています。以前は、バイナリフレームは常に ArrayBuffer として配信されていました。

WebSocket の binaryType プロパティは、WebSocket ごとに配信タイプを制御します。この変更は、websocket_standard_binary_type 互換性フラグを通じて、2026-03-17 以降の互換性日付を持つ Workers で有効になっています。

重要な注意事項

この変更が公開された際にドキュメント化すべきでしたが、できていませんでした。ご迷惑をおかけして申し訳ございません。

Worker がバイナリ WebSocket メッセージを処理し、event.dataArrayBuffer であると想定している場合、フレームは代わりに Blob として到着します。単純な instanceof ArrayBuffer チェックは、すべてのフレームをサイレントにドロップします。

ArrayBuffer 配信への復帰

accept() を呼び出す前に binaryType を割り当てることで、ArrayBuffer 配信にオプトバックできます。これは互換性フラグに関係なく機能します:

const resp = await fetch("https://example.com", {
  headers: {
    Upgrade: "websocket",
  },
});
const ws = resp.webSocket;

// この WebSocket の ArrayBuffer 配信にオプトバックします。
ws.binaryType = "arraybuffer";
ws.accept();

ws.addEventListener("message", (event) => {
  if (typeof event.data === "string") {
    // テキストフレーム。
  } else {
    // event.data は ArrayBuffer です (上記で binaryType を設定したため)。
  }
});

Wrangler 設定での設定

まだ移行する準備ができておらず、Worker のすべての WebSocket に対してデフォルトとして ArrayBuffer を保持したい場合は、Wrangler 設定ファイルに no_websocket_standard_binary_type フラグを追加してください。

Durable Object への影響

この変更は、Durable Object の hibernatable WebSocket webSocketMessage ハンドラには影響しません。引き続きバイナリデータは ArrayBuffer として受信されます。

詳細情報

詳細については、WebSocket バイナリメッセージ を参照してください。