معرفی ویژگی Transfer-Encoding در HTTP/1.1

http 1 1 transfer encoding rfc 9112
20 آبان 1403

در پروتکل HTTP/1.1، یکی از قابلیت‌های بسیار مهم و کاربردی، موضوع انتقال دهی یا همون Transfer-Encoding هست. این قابلیت به سرورها و مرورگرها اجازه می‌ده تا داده‌ها رو به صورت قطعه‌ای یا chunked transfer ارسال کنن و بدین ترتیب مدیریت و انتقال داده‌ها به شکل بهینه‌تر و با کارایی بیشتری انجام میشه.

وقتی که از Transfer-Encoding استفاده می‌کنیم، می‌تونیم فایل‌های بزرگ رو بدون نیاز به محاسبه کردن اندازه دقیقشون قبل از ارسال تقسیم بندی و ارسال کنیم. این ویژگی مخصوصا وقتی کاربرد داره که طول محتوا از قبل مشخص نیست، مثلا زمانی که از استریم‌های ورودی/خروجی موقع انتقال داده‌ها استفاده می‌کنید.

مثلاً فرض کنید که یه API دارید که یک فایل ویدیویی رو از یک سرویس دیگر می‌گیره و نیاز دارید که همین رو در لحظه برای کاربرها بفرستید. در اینجا Transfer-Encoding به شما کمک می‌کنه تا از ایجاد تاخیر جلوگیری کنید و داده‌ها رو سریع‌تر بفرستید.

یکی از موارد جالب اینه که اگرچه header مربوط به Transfer-Encoding می‌تونه شامل چندین قسمت باشه، اما شکل پرکاربردش chunked هست. البته استفاده از این حالت مستلزم اینه که کلاینت هم پشتیبانی مناسبی ازش داشته باشه.

در ادامه یه مثال ساده از نحوه ارسال یه پاسخ به صورت chunked رو داریم که مراحل و اجزای هر کدام رو نشون می‌ده.


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

7
Mozilla
9
Developer
7
Network
0

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

Content-Type: text/plain
نوع محتوایی که ارسال می‌کنید. اینجا از نوع متنی استفاده شده.

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

7
اندازه اولین chunk (قسمت) به بایت

Mozilla
داده‌های مربوط به اولین chunk

9
اندازه دومین chunk به بایت

Developer
داده‌های مربوط به دومین chunk

7
اندازه سومین chunk به بایت

Network
داده‌های مربوط به سومین chunk

0
پایان ارسال داده‌، هیچ داده‌ای بعد از این وجود ندارد.

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

؟

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

؟

چگونه می‌تونیم تشخیص بدیم که سرور از chunked encoding استفاده می‌کنه؟

؟

اگر کلاینت از chunked encoding پشتیبانی نکنه، چی میشه؟