توضیح هدر HTTP Sec-WebSocket-Accept

http sec websocket accept explanation
20 آبان 1403

زمانی که شما با تکنولوژی وب‌سوکت‌ها سر و کار دارید، معمولاً با مسائلی چون ارتباط دایمی و بلادرنگ بین مرورگر و سرور مواجه می‌شوید. وب‌سوکت‌ها یکی از بهترین انتخاب‌ها برای ایجاد ارتباطات دوطرفه و بهینه در وب هستند که در بسیاری از پروژه‌ها، از بازی‌های آنلاین گرفته تا چت‌های اینترنتی، استفاده می‌شوند.

یکی از اجزای کلیدی پروتکل وب‌سوکت، هدرهای HTTP ویژه‌ای است که در حین برقراری ارتباط‌های اولیه استفاده می‌شود. یکی از این هدرها، هدر Sec-WebSocket-Accept است. این هدر نقش مهمی در تکمیل ارتقاء اتصال HTTP به یک اتصال وب‌سوکت واقعی و تأیید اعتبار از سوی سرور دارد.

زمانی که یک client، مانند مرورگر، درخواست WebSocket می‌فرستد، معمولاً باید ابتدا یک هدر Sec-WebSocket-Key ارسال شود. سرور این مقدار را دریافت و آن را با یک مقدار ثابت ترکیب می‌کند و سپس از آن یک اثر انگشت (hash) می‌سازد. نتیجه‌ی این فرآیند به عنوان هدر Sec-WebSocket-Accept برمی‌گردد تا نشان دهد که سرور قادر به پشتیبانی از WebSocket است و اتصال تایید شده است.

درک نحوه کارکرد این هدر و نحوه ایجاد آن در کد نه تنها برای ایجاد و مدیریت WebSocket ها ضروری است، بلکه برای درک امنیت و چگونگی جلوگیری از اتصال‌های نامطمئن و جعلی نیز بسیار مهم است.

حال به یک نمونه کد نگاه می‌کنیم که نشان می‌دهد چطور می‌توان از Sec-WebSocket-Accept در سرور استفاده کرد:

const crypto = require('crypto');
const key = 'dGhlIHNhbXBsZSBub25jZQ=='; // مقدار نمونه
const magicString = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
const acceptKey = crypto.createHash('sha1')
    .update(key + magicString)
    .digest('base64');
console.log(acceptKey);

در این قطعه‌کد، ما:

const crypto = require('crypto');
این خط کتابخانه‌ی crypto را که برای انجام عملیات‌های رمزنگاری استفاده می‌شود، اضافه می‌کند.
const key = 'dGhlIHNhbXBsZSBub25jZQ==';
این خط یک کلید نمونه که از طرف کلاینت ارسال می‌شود را تعریف می‌کند.
const magicString = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
این خط رشته‌ی ثابت که در URL پروتکل تعریف شده است را مشخص می‌کند.
const acceptKey = crypto.createHash('sha1').update(key + magicString).digest('base64');
در این خط، ترکیب کلید و رشته‌ی ثابت با استفاده از الگوریتم SHA-1 هش شده و به base64 تبدیل می‌شود.
console.log(acceptKey);
این خط مقدار نهایی Sec-WebSocket-Accept تولید شده را به کنسول چاپ می‌کند.

سوالات متداول

؟

هدر Sec-WebSocket-Accept چیست؟

؟

چگونه می‌توان هدر Sec-WebSocket-Accept را در Node.js ایجاد کرد؟

؟

چرا استفاده از هدر Sec-WebSocket-Accept مهم است؟