Sự kiện do máy chủ gửi là gì? EventSource và HTTP Streaming

Sự kiện do máy chủ gửi là gì? EventSource và HTTP Streaming

Trình duyệt thu thập dữ liệu không cần scrap cung cấp các phiên trình duyệt được quản lý để quan sát và tự động hóa các giao diện web qua HTTP, bao gồm các phản hồi phát trực tiếp được hiển thị bởi các trang.

Tóm tắt

  • SSE là truyền tải HTTP. Máy chủ phản hồi với Content-Type text/event-stream và giữ phản hồi mở.
  • API trình duyệt là EventSource. Nó phân tích các sự kiện và hiển thị các callback mở, tin nhắn và lỗi.
  • Giao hàng từ máy chủ đến khách hàng. Lệnh của khách hàng sử dụng các yêu cầu HTTP thông thường.
  • Các sự kiện có thể mang theo ID và tên. Last-Event-ID hỗ trợ phục hồi ứng dụng.
  • Payload SSE là văn bản UTF-8. Dữ liệu nhị phân cần mã hóa văn bản hoặc một phương thức vận chuyển khác.

Giới thiệu

Sự kiện do máy chủ gửi, thường được rút gọn thành SSE, cho phép máy chủ truyền tải một chuỗi các sự kiện văn bản UTF-8 qua một phản hồi HTTP lâu dài. Trong các trình duyệt, API EventSource mở luồng, phân phối các sự kiện có tên, theo dõi ID sự kiện cuối cùng, và kết nối lại khi kết nối kết thúc trong các điều kiện được hỗ trợ.

SSE là một chiều trên kênh đó: từ máy chủ đến khách hàng. Hành động của người dùng vẫn đi qua các yêu cầu HTTP riêng biệt. Sự phân tách đó khiến SSE phù hợp với thông báo, tiến độ, nhật ký, số liệu trực tiếp, và văn bản được tạo ra nơi trình duyệt chủ yếu lắng nghe.

Định dạng luồng sự kiện

Một phản hồi SSE sử dụng loại phương tiện text/event-stream. Nội dung chứa các dòng cho dữ liệu, tên sự kiện, định danh, và gợi ý về độ trễ kết nối lại, với một dòng trống kết thúc một sự kiện. Nhiều dòng dữ liệu được kết hợp thành một tin nhắn đã phân phối. Các dòng bắt đầu bằng dấu hai chấm là chú thích và có thể hoạt động như nhịp tim.

Tiêu chuẩn Tiêu chuẩn HTML xác định Sự kiện do Máy chủ Gửi, bao gồm phân tích, phân phối, kết nối lại, và hành vi Last-Event-ID. Định dạng được thiết kế đơn giản đủ để tạo ra từ nhiều khung máy chủ.

Cách EventSource Hoạt Động

Trình duyệt xây dựng EventSource với một URL và nhận các sự kiện mở, tin nhắn và lỗi. Các sự kiện SSE có tên được chuyển giao qua addEventListener, trong khi các sự kiện không có tên sử dụng trình xử lý tin nhắn. Kết nối vẫn là một yêu cầu HTTP với các quy tắc xác thực và nguồn gốc của trình duyệt.

Tài liệu tham khảo API EventSource ghi lại readyState, close, vớiCredentials, và xử lý sự kiện. EventSource gốc không phơi bày cùng một tính linh hoạt về tiêu đề yêu cầu tùy chỉnh như fetch, vì vậy thiết kế xác thực thường sử dụng cookie, URL ngắn hạn, hoặc một trình phân tích luồng dựa trên fetch.

ID sự kiện và phục hồi

Khi một máy chủ gửi một trường ID, trình duyệt lưu trữ nó như ID sự kiện cuối cùng. Sau khi kết nối bị ngắt, một yêu cầu tiếp theo có thể bao gồm Last-Event-ID để máy chủ biết nơi khách hàng dừng lại.

Máy chủ phải giữ lại hoặc tái tạo các sự kiện để điều này cung cấp việc phục hồi thực sự. Nếu luồng chỉ phát ra các giá trị hiện tại, một ID cũ không có gì để phát lại. Xác định xem các ID có được sắp xếp toàn cầu, giới hạn cho một người dùng hoặc chủ đề, và hợp lệ trên các triển khai.

Bộ đệm và Nhịp tim

Một luồng hợp lệ vẫn có thể cảm thấy bị hỏng khi một máy chủ ứng dụng, proxy, lớp nén, hoặc cổng điều tiết đầu ra thay vì xả sự kiện. Cấu hình đường dẫn cho phát trực tiếp, vô hiệu hóa bộ đệm phản hồi không phù hợp, và viết các ranh giới sự kiện kịp thời.

Các dòng chú thích có thể giữ các đường dẫn nhàn rỗi hoạt động mà không tạo ra các sự kiện ứng dụng. Tần suất nhịp tim nên tuân theo thời gian chờ hạ tầng hơn là một tỷ lệ cao tùy ý. Các ngữ nghĩa HTTP và trung gian vẫn áp dụng; RFC 9110 cung cấp các quy tắc phản hồi xung quanh.

Bảo mật và Giới hạn Tài nguyên

Các điểm cuối SSE có thể phơi bày các cập nhật riêng tư trong một thời gian dài. Xác thực yêu cầu, ủy quyền các chủ đề của nó, áp dụng chính sách nguồn gốc và xác thực, giới hạn số lượng kết nối theo danh tính, và ngăn chặn việc nhập của người dùng từ việc chọn các kênh nội bộ tùy ý.

Tránh đưa các thông tin xác thực bền bỉ vào chuỗi truy vấn vì các URL xuất hiện trong nhật ký. Đóng các luồng khi ủy quyền hết hạn, và đảm bảo rằng các bộ nhớ đệm chia sẻ không bao giờ kết hợp các phản hồi cụ thể của người dùng. Đối xử với dữ liệu sự kiện như là đầu vào không đáng tin cậy trong trình duyệt; nhận văn bản từ một nguồn gốc đáng tin cậy không làm cho việc nhúng HTML an toàn.

Mở rộng Phân phối Một Chiều

Mỗi khách hàng kết nối tiêu thụ một luồng phản hồi và một số trạng thái máy chủ. Việc sản xuất sự kiện có thể xảy ra trên bất kỳ nút ứng dụng nào, vì vậy các hệ thống đa phiên bản cần một môi giới hoặc nhật ký chia sẻ có thể định tuyến các sự kiện đến nút giữ mỗi kết nối.

Áp lực ngược vẫn quan trọng. Nếu một khách hàng đọc chậm, giới hạn bộ đệm đang chờ, gộp trạng thái có thể thay thế, hoặc đóng luồng theo một chính sách đã được tài liệu. Sự đơn giản của SSE giảm bớt công việc giao thức, nhưng không loại bỏ kế hoạch năng lực cho kết nối, tỷ lệ sự kiện và lưu trữ phát lại.

TrườngÝ nghĩaGhi chú Thao tác
dữ liệuVăn bản tảiNhiều dòng kết nối với dòng mới
sự kiệnLoại sự kiện được đặt tênGửi thông điệp với addEventListener
idTiếp tục con trỏTrả về dưới dạng Last-Event-ID
gợi ý độ trễThời gian tái kết nối của trình duyệtĐịnh dạng biểu thị giá trị bằng mili giây
nhận xétDòng bắt đầu bằng dấu hai chấmHữu ích như một tín hiệu nhịp tim
dòng trắngKết thúc một sự kiệnGợi ý làm sạch tránh độ trễ rõ ràng

Sự kiện do máy chủ gửi là gì? Kế hoạch xác thực Streaming HTTP và EventSource

SSE là streaming HTTP. Máy chủ phản hồi với Content-Type text/event-stream và giữ phản hồi mở. Xác thực tuyên bố đó trên toàn bộ đường đi sản xuất. Bắt đầu với một trao đổi đại diện nhỏ, ghi lại hành vi đã thương lượng tại khách hàng và biên, và xác nhận rằng ứng dụng nhận được các trường, khung hoặc sự kiện mà nó mong đợi qua cùng một cổng, proxy, điểm kết thúc chứng chỉ và chính sách mạng được sử dụng bởi lưu lượng thực tế.

Biến giả định thiết kế đầu tiên thành một bài tập thất bại: Trả về text/event-stream. Sau đó kiểm tra áp lực tài nguyên xung quanh giả định thứ hai: Vô hiệu hóa bộ đệm proxy cho tuyến đường. Một triển khai chính xác nên thất bại trong các giới hạn được tài liệu hóa, giải phóng trạng thái kết nối và bộ đệm, và để lại một dấu vết giải thích kết quả mà không tiết lộ thông tin xác thực hoặc tải riêng tư.

Các token phản hồi AI và bài tập tiến độ Job thể hiện các phần khác nhau của thiết kế, do đó việc thử nghiệm tương thích nên bao gồm cả hình dạng lưu lượng có liên quan. Thêm một trình duyệt hiện tại, một khách hàng không phải trình duyệt, một đường truyền mạng chậm hơn, và trung gian hỗ trợ cũ nhất. Ghi lại lựa chọn phiên bản, thời gian sống kết nối, tuổi của thông điệp hoặc phản hồi, độ sâu hàng đợi, và lý do đóng cho đường đi ưu tiên và phương án dự phòng của nó.

Xem xét ngữ nghĩa và vận chuyển như các lớp riêng biệt trong suốt thử nghiệm. Một kết nối thành công không chứng minh rằng ứng dụng đã xử lý đúng thứ tự, ủy quyền, hủy bỏ, bộ nhớ đệm, phát lại hoặc phục hồi trạng thái. Tương tự, một lỗi ứng dụng không chứng minh rằng giao thức đã thương lượng thất bại. Đánh dấu quan sát với tài nguyên, phạm vi người dùng, hoạt động logic, và định danh kết nối, sau đó so sánh những gì mỗi điểm cuối tin rằng đã xảy ra. Sự tách biệt này làm cho công việc về năng lực hữu ích hơn: các nhóm có thể thấy liệu độ trễ đến từ việc thiết lập kết nối, giao hàng mạng, lập hàng, xử lý ứng dụng, tuần tự hóa, hay một máy nhận chậm. Giữ nội dung riêng tư ra khỏi các bộ dữ liệu theo dõi thường xuyên trong khi vẫn giữ đủ dữ liệu thời gian và kết quả để tái tạo quyết định.

Nơi nào Sự kiện do máy chủ gửi xuất hiện? EventSource và Streaming HTTP Thực hành

Các token phản hồi AI

Một máy chủ phát trực tuyến văn bản được tạo trong khi lệnh vẫn là các yêu cầu thông thường.

Tiến độ công việc

Các công nhân công bố thay đổi giai đoạn đến một trang trạng thái lắng nghe.

Nhật ký hoạt động

Một bảng điều khiển theo dõi các sự kiện văn bản được phép với các ID có thể tiếp tục.

Thông báo

Máy chủ cung cấp các sự kiện tài khoản không cần thông điệp thường xuyên từ khách hàng.

Danh sách kiểm tra sản xuất cho Sự kiện do máy chủ gửi? EventSource và HTTP Streaming

  • Trả về text/event-stream. Chuyển đổi điểm này thành một bài kiểm tra chấp nhận bằng văn bản để người xem có thể phân biệt hành vi dự định từ một chi tiết triển khai ngẫu nhiên.
  • Vô hiệu hóa bộ đệm proxy cho tuyến đường. Đặt tên cho thành phần sở hữu cài đặt và người hoặc nhóm phản hồi khi hành vi quan sát của nó thay đổi.
  • Xả sau khi các ranh giới sự kiện hoàn tất. Bắt tín hiệu liên quan trong nhật ký hoặc dấu vết, sau đó xác minh rằng tín hiệu tồn tại qua từng proxy, cổng, và ranh giới dịch vụ trong đường đi thực tế.
  • Gán ID sự kiện ổn định khi phát lại quan trọng. Kiểm tra quyết định với một trường hợp bình thường, một đồng nghiệp chậm, một kết nối đóng, một đầu vào quá lớn, và một sự không tương thích phiên bản hoặc khả năng.
  • Định nghĩa bảo quản và phương án dự phòng cho ảnh chụp nhanh. Tài liệu hóa mặc định an toàn và điều kiện chính xác cho phép ngoại lệ; các ngoại lệ ẩn trở thành vấn đề liên kết trong quá trình thay đổi sau này.
  • Gửi nhận xét chỉ khi cần thiết cho các đường dẫn nhàn rỗi. Kiểm tra hành vi này từ một trình duyệt hoặc khách hàng đại diện thay vì chỉ dựa vào một bài kiểm tra đơn vị cục bộ hoặc màn hình cấu hình phía máy chủ.
  • Xác thực và ủy quyền cho mỗi luồng. Đặt giới hạn tài nguyên hữu hạn và làm cho việc từ chối kết quả trở nên rõ ràng với cả nhà điều hành và ứng dụng gọi.
  • Ngăn chặn việc lưu trữ sự kiện riêng tư trong bộ nhớ đệm được chia sẻ. Bảo tồn đủ định danh để liên kết một trao đổi logic qua khách hàng, biên, ứng dụng, và bất kỳ công nhân bất đồng bộ nào.
  • Hàng đợi khách hàng chậm bị ràng buộc. Xem xét lựa chọn sau khi thay đổi hình dạng lưu lượng vì số lượng kết nối, kích thước tải, và tần suất thông điệp có thể thay đổi thiết kế đúng.
  • Đo lường các kết nối mở, độ trễ sự kiện và nguyên nhân ngắt kết nối. Giữ cho đường dẫn dự phòng có thể quan sát và được kiểm tra để đảm bảo tính tương thích không phụ thuộc vào một đường dẫn cũ đã ngừng hoạt động mà không thông báo.

Kết luận

SSE là truyền phát HTTP. Máy chủ phản hồi với Content-Type text/event-stream và giữ cho phản hồi mở. Tải trọng SSE là văn bản UTF-8. Dữ liệu nhị phân cần được mã hóa văn bản hoặc một phương tiện vận chuyển khác. Áp dụng hai sự thật đó với giới hạn rõ ràng, trạng thái quan sát được và một đường dẫn dự phòng đã được kiểm tra bởi các khách hàng đại diện chứ không phải từ cấu hình.

Sẵn sàng để xây dựng một quy trình công việc dữ liệu web đáng tin cậy?

Biến các quyết định giao thức thành các quy trình làm việc quan sát được trên trình duyệt và API với Scrapeless.

Đăng ký hôm nay và nhận 5 đô la tín dụng miễn phíkhông yêu cầu thẻ tín dụng.

Nhận tín dụng 5 đô la của bạn →

Câu hỏi thường gặp

Các sự kiện do máy chủ gửi có phải là hai chiều không?

Không. SSE mang sự kiện từ máy chủ đến khách hàng; khách hàng gửi lệnh thông qua các yêu cầu HTTP riêng biệt.

Các sự kiện do máy chủ gửi có tự động kết nối lại không?

API EventSource của trình duyệt kết nối lại theo các điều kiện xác định, nhưng máy chủ phải hỗ trợ ID sự kiện và phát lại nếu dữ liệu bị mất cần được phục hồi.

SSE có thể gửi dữ liệu nhị phân không?

SSE là định dạng văn bản UTF-8. Nội dung nhị phân phải được mã hóa thành văn bản hoặc được gửi qua một cơ chế khác.

SSE có hoạt động trên HTTP/2 không?

Có. SSE là một định dạng phản hồi HTTP và có thể được chuyển giao qua HTTP/2 khi khách hàng, máy chủ và các trung gian hỗ trợ điều đó.

Tại sao các sự kiện SSE lại đến theo lô?

Một proxy, khung máy chủ, lớp nén, hoặc bộ đệm ứng dụng có thể đang giữ đầu ra; các tuyến streaming cần được xả kịp thời và các cài đặt trung gian tương thích.

Tài liệu tham khảo