انتقال داده به صورت Chunked در HTTP/RFC 9112

http chunked transfer coding
01 دی 1403

انتقال داده به صورت Chunked در HTTP/1.1


سلام دوستان! امروز می‌خواهیم درباره یک ویژگی جالب در پروتکل HTTP/1.1 صحبت کنیم که به نام «انتقال داده به صورت Chunked» شناخته می‌شود. این ویژگی به ما اجازه می‌دهد تا داده‌ها را به قطعات کوچک ارسال کنیم، به جای اینکه همه‌ی داده‌ها را یکباره ارسال کنیم. این امر به ویژه در حالتی که حجم داده‌ها زیاد است، بسیار کاربردی و مفید است.


اما چرا این تکنیک به وجود آمد؟ خوب، در شرایطی خاص ممکن است نخواهیم منتظر بمانیم تا تمام داده‌ها آماده شوند. برای مثال، ممکن است در حال استریم یک ویدیو یا گزارش جباری‌ات باشیم. با استفاده از Chunked Transfer Encoding، می‌توانیم داده‌ها را به صورت بلادرنگ ارسال کنیم و کاربر نمی‌تواند تا زمان دریافت کامل داده‌ها، منتظر بماند.


این روش به صورت زیر عمل می‌کند: هر قطعه از داده‌ها با اندازه‌ی خود شروع می‌شود و پس از آن محتوا، با یک نشانه خاص به پایان می‌رسد. این نشانه به سرور و کلاینت می‌گوید که داده‌های جدید شروع می‌شوند و همین‌طور هنگامی‌که ارسال داده‌ها تمام شده است.


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


HTTP/1.1 200 OK
Content-Type: text/html
Transfer-Encoding: chunked

4
Wiki
5
pedia
0


توضیحات کد


حالا بیایید خط به خط این کد را بررسی کنیم:



خط اول: HTTP/1.1 200 OK
این خط نشان‌دهنده وضعیت موفقیت‌آمیز درخواست است و به کلاینت اعلام می‌کند که همه‌چیز به‌خوبی پیش رفته است.


خط دوم: Content-Type: text/html
این خط نوع محتوای پاسخ را تعیین می‌کند که در اینجا HTML است.


خط سوم: Transfer-Encoding: chunked
اینجا ما به کلاینت می‌گوییم که داده‌ها به صورت chunked ارسال خواهند شد.


خط چهارم: 4
این عدد نشان‌دهنده اندازه اولین قطعه داده است که 4 بایت است.


خط پنجم: Wiki
این داده‌ی قطعه اول ما است.


خط ششم: 5
این عدد نشان‌دهنده اندازه قطعه‌ی دوم است که 5 بایت است.


خط هفتم: pedia
این داده‌ی قطعه دوم ما است.


خط هشتم: 0
این شماره نشان‌دهنده این است که هیچ قطعه‌ی جدیدی برای ارسال وجود ندارد و عملیات خاتمه یافته است.


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

؟

Chunked Transfer Encoding چیست؟

؟

چرا باید از Chunked Transfer Encoding استفاده کنیم؟

؟

آیا می‌توانیم از Chunked Transfer Encoding برای ارسال فایل‌های بزرگ استفاده کنیم؟

؟

چطور می‌توانیم از Chunked Transfer Encoding در سرور استفاده کنیم؟