Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Support WebSockets over HTTP/2 via RFC 8441 Extended CONNECT

Đang mở
#1,112 1 bình luận 1 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
30/100
Loại issue
Tính năng
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Ít trao đổi
Công nghệ
scala
Lĩnh vực
api, backend, networking

Hướng nghiên cứu

Bắt đầu bằng cách xem xét các API WebSocketUpgrade và handleWebSocketMessages hiện có, sau đó lần theo cách xử lý HTTP/2 theo RFC 8441. Xác định cách SETTINGS_ENABLE_CONNECT_PROTOCOL, Extended CONNECT, HTTP/2 status 200, luồng frame và việc kết thúc stream sẽ tích hợp với ngăn xếp thông điệp WebSocket hiện có. Hoàn tất nghĩa là đã thống nhất API và hành vi phía máy chủ, với độ bao phủ cho các stream WebSocket HTTP/2 được chấp nhận và đã kết thúc.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Problem

Pekko HTTP supports HTTP/2 and WebSockets, but WebSocket support currently appears to be limited to the classic HTTP/1.1 upgrade handshake.

RFC 8441 defines how to bootstrap WebSockets over HTTP/2 using Extended CONNECT:

  • server advertises SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
  • client sends :method = CONNECT
  • client sends :protocol = websocket
  • request also includes :scheme, :path, and :authority
  • server accepts with :status = 200
  • WebSocket frames are then carried over the HTTP/2 stream

This would allow applications to serve HTTP/2 requests and WebSockets on the same HTTP/2 connection instead of falling back to a separate HTTP/1.1 WebSocket upgrade connection.

RFC: https://www.rfc-editor.org/rfc/rfc8441.html

Current Behavior

Pekko HTTP WebSocket handling is based on the HTTP/1.1 upgrade model:

  • request validation expects Upgrade: websocket, Connection: Upgrade, Sec-WebSocket-Key, and Sec-WebSocket-Version
  • accepted WebSockets return 101 Switching Protocols
  • the existing WebSocketUpgrade API represents upgrading the connection to WebSocket

That matches RFC 6455 over HTTP/1.1, but not RFC 8441 over HTTP/2.

Expected Behavior

When HTTP/2 is enabled, Pekko HTTP should optionally support RFC 8441 WebSockets over HTTP/2.

At a high level this likely means:

  • advertise SETTINGS_ENABLE_CONNECT_PROTOCOL = 1 when server-side support is enabled
  • accept HTTP/2 Extended CONNECT requests with :protocol = websocket
  • expose those requests to routing / low-level APIs similarly to existing WebSocket upgrade requests
  • allow existing handleWebSocketMessages / WebSocketUpgrade style APIs to work where practical
  • respond with HTTP/2 :status = 200 when the WebSocket is accepted
  • connect the existing WebSocket frame/message stack to the HTTP/2 stream DATA flow
  • map HTTP/2 stream end/reset/failure semantics sensibly to WebSocket close behavior

Motivation

Modern browsers support WebSockets over HTTP/2 via RFC 8441. Supporting this in Pekko HTTP would allow one server port and one HTTP/2 connection to handle both normal HTTP traffic and WebSockets.

This is useful for frameworks built on Pekko HTTP as well. For example, Play Framework can enable HTTP/2 on its Pekko HTTP backend, but WebSocket support still depends on the HTTP/1.1 upgrade path because Pekko HTTP does not currently expose RFC 8441 WebSocket support.

Notes

Netty has already added several low-level RFC 8441 building blocks, but still tracks high-level WebSocket-over-HTTP/2 support as an open feature request:

A third-party Netty implementation also exists:

Questions

  • Would the Pekko HTTP project be open to RFC 8441 server-side support?
  • Should this be implemented behind an explicit config flag, for example under pekko.http.server.websocket or pekko.http.server.http2?
  • Should the existing WebSocketUpgrade API be reused for HTTP/2 Extended CONNECT, or should there be a separate API to distinguish HTTP/1.1 upgrade from HTTP/2 stream-based WebSocket bootstrap?
Ngôn ngữ chính
Scala
Star
196
Fork
56
Merge trung bình
1 ngày 18 giờ
Pull request đã merge (30 ngày)
43

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/pekko-http

Tất cả issue của apache/pekko-http

Issue tương tự

Thêm issue về Scala

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.