طول بدن پیام در HTTP/1.1

http message body length
20 مرداد 1404

پیام طول بدن در HTTP/1.1


خب، بیایید درباره این موضوع کمی صحبت کنیم. HTTP (پروتکل انتقال ابرمتن) یکی از سازوکارهای اصلی وب است و اطلاعات را بین سرور و کلاینت منتقل می‌کند. یکی از نکات مهم در این پروتکل، طول بدن پیام است. این بخش در RFC 9112 به طور مفصل توضیح داده شده و بیان می‌کند که چطور باید این طول مشخص شود. برای ما به عنوان توسعه‌دهنده، گاهی اوقات نیاز داریم بدانیم که داده‌هایی که ارسال یا دریافت می‌کنیم چقدر بزرگ هستند.


در HTTP/1.1، طول بدن پیام می‌تواند به دو روش مختلف مشخص شود. روش اول استفاده از هدر Content-Length است که مشخص می‌کند بدنه پیام به چه اندازه است. با استفاده از این هدر، سرور می‌تواند به کلاینت بگوید که چه مقدار داده انتظار می‌رود و کلاینت نیز می‌تواند بر اساس آن اقدام کند.


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


درواقع ما باید بدانیم که انتخاب یکی از این دو روش چگونه می‌تواند بر روی عملکرد و کارایی اپلیکیشن ما تاثیر بگذارد. برای مثال، در شرایطی که داده‌ها به سرعت تولید می‌شوند، استفاده از تکه‌تکه کردن می‌تواند مفیدتر باشد. از سوی دیگر، زمانی که به شکل واضحی می‌دانیم طول داده‌ها چقدر است، استفاده از Content-Length ممکن است بهترین انتخاب باشد.


نمونه کد


GET /example HTTP/1.1
Host: www.example.com
Content-Length: 123

این یک پیام تستی است.

توضیحات درباره کد



خط اول: GET /example HTTP/1.1 نمایانگر یک درخواست HTTP از نوع GET است که به آدرس /example ارسال می‌شود.


خط دوم: Host: www.example.com نشان می‌دهد که درخواست به کدام هاست ارسال می‌شود.


خط سوم: Content-Length: 123 طول بدن پیام را که 123 بایت است مشخص می‌کند.


خط چهارم: رایانه نشان‌دهنده جداکننده بین هدرها و بدنه پیام است.


خط پنجم: این یک پیام تستی است. بدنه پیام است که به سرور ارسال می‌شود.

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

؟

چرا باید طول بدن پیام را مشخص کنیم؟

؟

تفاوت بین Content-Length و Transfer-Encoding چیست؟

؟

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