WebSocket — سوکت وب دوطرفه

یک اتصال دائمی و دوطرفه بین مرورگر و سرور. با یک درخواست HTTP شروع می‌شود و بعد به جریان سبکی از فریم‌ها تبدیل می‌شود؛ مناسب چت، اعلان زنده و داشبورد.

  • لایهٔ OSI: 7 (کاربرد)
  • انتقال: TCP
  • پورت: 80 / 443
  • استاندارد: RFC 6455
  • سطح: متوسط · حدود 7 دقیقه

نکته‌های کلیدی

  • اتصال دوطرفه و دائمی روی یک سوکت TCP؛ سرور بدون درخواست داده می‌فرستد.
  • دست‌دهی با HTTP Upgrade انجام می‌شود، پس از پورت‌های ۸۰ و ۴۴۳ عبور می‌کند.
  • wss:// همان WebSocket روی TLS است.

مراحل شبیه‌سازی (7 بسته)

  1. Upgrade: اتصال با یک درخواست HTTP معمولی شروع می‌شود که ارتقا به WebSocket را می‌خواهد.
  2. 101: سرور با کد ۱۰۱ می‌پذیرد. مقدار Accept از هش SHA-1 کلید کلاینت به‌علاوهٔ یک GUID ثابت ساخته می‌شود تا ثابت شود سرور واقعاً WebSocket می‌فهمد.
  3. فریم متنی: مرورگر پیام «Hello» را در یک فریم ماسک‌شده می‌فرستد. همهٔ فریم‌های کلاینت باید ماسک شوند تا پراکسی‌های قدیمی فریب نخورند.
  4. پیام سرور: سرور هر زمان که بخواهد، بدون درخواست، داده می‌فرستد؛ مزیت اصلی WebSocket همین است. فریم‌های سرور ماسک ندارند.
  5. Ping: سرور برای اطمینان از زنده بودن اتصال یک فریم Ping می‌فرستد.
  6. Pong: مرورگر خودکار با Pong پاسخ می‌دهد؛ ماسک‌شده، چون از سمت کلاینت است.
  7. Close: برای بستن، فریم Close با کد ۱۰۰۰ (پایان عادی) فرستاده می‌شود و طرف مقابل همان را برمی‌گرداند.

درس‌های مرتبط

  • HTTP/1.1 — پروتکل انتقال ابرمتن
  • HTTPS — HTTP امن روی TLS
  • HTTP/2 — نسل دوم HTTP