حاسبة Range HTTP
تحقق من نطاق البايتات قبل إرساله: النطاق 0-499 في ملف حجمه 10000 بايت يعني أول 500 بايت، وهو نطاق قابل للتلبية يقابله الرد 206 والسطر bytes 0-499/10000. وتعمل أيضًا النطاقات المفتوحة ونطاقات البايتات الأخيرة. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- وضع الحساب
- Parse
- ترويسة Range
- bytes=0-499
- حجم المورد
- 10,000
- عدد النطاقات
- 1 bytes
- تلميح الحالة
- 206
- البايتات المطلوبة
- 500
- نطاق المحتوى (Content-Range)
- bytes 0-499/10000
كتابة bytes=بداية-نهاية يدويًا تبدو سهلة حتى تحتاج صيغة اللواحق أو الأطراف المفتوحة أو المجموعات متعددة الأجزاء أو سطر Content-Range يطابق حجم الملف الحقيقي. فشل التحقق لا يُفوتر.
ثلاث طرق لطلب جزء من ملف
تخبر ترويسة Range الخادم بالبايتات التي تريدها من الملف بدل الملف كله. فالصيغة المغلقة تذكر بداية ونهاية مشمولتين، لذا فإن 0-499 هي أول 500 بايت. والصيغة المفتوحة تذكر البداية وحدها، مثل 500-، وتمتد إلى البايت الأخير، وبها يُستأنف التنزيل المنقطع من حيث توقف تمامًا. أما صيغة اللاحقة، مثل -500، فتطلب آخر 500 بايت حين يُعرف المقدار المتبقي دون الموضع. ويمكنك جمع حتى 32 نطاقًا في ترويسة واحدة تفصل بينها فواصل.
مطابقة النطاق مع حجم الملف الحقيقي
إذا حددت حجم الملف تحوّل كل نطاق إلى مواضع مطلقة: فتُغلق النهايات المفتوحة عند الحجم ناقص واحد، وتصبح اللواحق النافذة الأخيرة من الملف، ويُوسم النطاق الذي يبدأ بعد النهاية بأنه غير قابل للتلبية. وإذا انطبقت كل النطاقات فالرد المتوقع 206، وإلا فهو 416. ولنطاق واحد صالح تحصل أيضًا على سطر نطاق المحتوى المطابق، مثل bytes 0-499/10000 لأول 500 بايت من ملف حجمه 10000.
ماذا تطلب ترويسة Range وما الصيغ المقبولة
وفق RFC 9110 الوحدة الشائعة هي bytes، والقيمة بعد علامة التساوي مجموعة مواصفات نطاق مفصولة بفواصل. النطاق المفتوح بداية- يعني من ذلك الإزاحة حتى آخر بايت في التمثيل الحالي. نطاق اللاحقة -N يعني آخر N بايت، وهي الصيغة التي يستخدمها مديرو التنزيل عندما يعرفون المتبقي دون الإزاحة المطلقة.
تقبل هذه الحاسبة سطر Range كاملًا أو صيغة الوحدة=النطاقات، وتُطبّع الوحدة إلى bytes بأحرف صغيرة، وتزيل المسافات الاختيارية، وترفض أي وحدة غير bytes. تُسمح المجموعات متعددة الأجزاء حتى اثنين وثلاثين جزءًا لقراءات متفرقة دون اختراع لغة مصغّرة.
حالات الاستخدام
استئناف التنزيلات المتقطعة
ابنِ أو حلّل نطاقات bytes=بداية- مقابل حجم ملف معروف حتى يستأنف العميل تمامًا حيث توقفت النقلة السابقة دون تداخل أو فجوات.
طلب موضع الوسائط والقراءات الجزئية
احسب ترويسات Range مغلقة أو مفتوحة لتمرير الفيديو والصوت، وتحقق من 206 مقابل 416 قبل إرسال الطلب إلى الأصل أو CDN.
الأسئلة الشائعة
ماذا يطلب النطاق 0-499؟
أول 500 بايت. فالنطاق المغلق يشمل طرفيه، لذا يمتد 0-499 من البايت 0 إلى البايت 499. واعتبار النهاية مستبعدة يُسقط البايت الأخير من الحساب.
كيف أطلب الجزء الأخير من ملف؟
استخدم صيغة اللاحقة، أي علامة الطرح يليها عدد، مثل -500 لآخر 500 بايت. وتستخدمها برامج إدارة التنزيل حين تعرف المقدار المتبقي ولا تعرف موضع البداية بدقة.
متى يكون النطاق غير قابل للتلبية؟
عندما يبدأ بعد نهاية الملف. فإذا حددت الحجم وُسم هذا النطاق بأنه غير قابل للتلبية، ويكون الرد المتوقع 416 مع سطر يذكر الحجم الحقيقي للملف.
كم نطاقًا تتسع له الترويسة الواحدة؟
حتى 32 نطاقًا تفصل بينها فواصل، فتطلب عدة أجزاء متفرقة من الملف دفعة واحدة. ولا تُقبل إلا وحدة البايت، وتُرفض أي وحدة أخرى.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/http-range-header \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"parse"}'const res = await fetch("https://api.kit.forhosting.com/dev/http-range-header", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "parse"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/http-range-header",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "parse"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/http-range-header", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"parse"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"parse"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/http-range-header", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"mode": "parse"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.http_range_header",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تعتمد التنزيلات الجزئية وطلب موضع الفيديو والاستئناف بعد الانقطاع على ترويسة طلب HTTP Range. تقبل حاسبة ترويسة Range HTTP هذه إما قيمة Range للتحليل أو حقول بداية ونهاية ولاحقة منفصلة للبناء، ثم تُرجع نطاقات مهيكلة مع أطوالها، وقابلية الإرضاء الاختيارية مقابل حجم المورد، وإشارة حالة 206 أو 416، وسلسلة Content-Range عند معرفة نطاق واحد قابل للإرضاء. المنطق النقي نفسه يشغّل ودجة المتصفح المجانية ومسار API، فلا تختلف مكتبات العميل وقواعد حافة CDN ومديرو التنزيل حول شرعية النطاق. استخدمها عندما تريد حساب بايتات حتميًا دون إقامة مكدس HTTP كامل لمجرد فحص ترويسة.
ماذا تعني ترويسة HTTP Range وما الصيغ التي يقبلها هذا الأداة
يخبر طلب HTTP Range الخادم بأي فترات بايت من التمثيل يريدها العميل بدل الجسم كاملًا. النطاق المغلق بداية-نهاية شامل للطرفين، لذا يطلب bytes=0-499 أول خمسمائة بايت. عند تقديم resource_size تُحلّ كل مواصفة إلى إزاحات بداية ونهاية مطلقة: تُغلق الأطراف المفتوحة عند الحجم ناقص واحد، وتصبح اللواحق نافذة الذيل، وتُعلَّم النطاقات المغلقة التي تبدأ بعد نهاية الملف بأنها غير قابلة للإرضاء. عندما يكون كل نطاق محلول قابلًا للإرضاء والمورد غير فارغ تكون status_hint هي 206 Partial Content؛ وإلا 416 Range Not Satisfiable مع Content-Range bytes نجمة شرطة مائلة حجم، كما تردّ الخوادم الأصل الدقيقة على استئنافات سيئة.
عقد الإدخال، البناء مقابل التحليل، وحقول الاستجابة
اضبط mode على parse أو build. في وضع parse يكون range_header إلزاميًا وقد يبدو bytes=0-499 أو Range: bytes=500- أو متعدد الأجزاء bytes=0-0,-1. في وضع build قدّم suffix_length لصيغة آخر N، أو start مع end شامل اختياري للصيغ المغلقة أو المفتوحة؛ ولا تخلط suffix_length مع start أو end. resource_size اختياري في الوضعين: احذفه إن احتجت فقط التطبيع النحوي وأطوال النطاقات المغلقة؛ وأدرجه عندما تحتاج أعلام satisfiable وbytes_requested مقابل ملف حقيقي وcontent_range وstatus_hint. يجب أن تكون الأعداد الصحيحة آمنة وغير سالبة؛ وsuffix_length واحدًا على الأقل. عند النجاح يتضمن الجسم دائمًا mode وrange_header القياسي وunit bytes وrange_count ومصفوفة ranges. يحمل كل كائن نطاق kind (closed أو open_end أو suffix) وسلسلة raw، وعند المعرفة start وend وlength وsuffix وsatisfiable. bytes_requested على المستوى الأعلى هو مجموع الأطوال المحلولة عندما تُعرف كلها. يُصدَر content_range لنطاق واحد قابل للإرضاء كـ bytes بداية-نهاية شرطة مائلة حجم، أو bytes نجمة شرطة مائلة حجم عند عدم الإرضاء. الترويسات غير الصالحة والأوضاع الخاطئة والتوليفات غير المتسقة تفشل بـ invalid_input ولا تُفوتر. مثال: تحليل bytes=0-499 مع resource_size عشرة آلاف يعطي طولًا خمسمائة وcontent_range bytes 0-499/10000 وstatus_hint 206.
أين تثبت حاسبة HTTP Range جدواها
يستأنف مديرو التنزيل والمثبتات القطع الكبيرة بإعادة إرسال ترويسات Range بعد انقطاع الشبكة؛ وحاسبة مشتركة تمنع أخطاء الإزاحة بواحد التي تعيد تنزيل ISO كاملًا أو تتخطى صفحة حرجة من PDF. يبني مشغّلو الوسائط الباحثون داخل MP4 تقدمي أو صوت نطاقات مفتوحة أو مغلقة ويجب أن يعرفوا إن كان الأصل سيرد 206 أو 416 قبل رسم شريط التمرير. تثبت اختبارات بوابات API وإعداد CDN أن قواعد الحافة تعيد توجيه النطاقات وتقيّدها بشكل صحيح مقابل أحجام كائنات معروفة دون تشغيل أصل كامل. يدمج مؤلفو SDK الدالة النقية نفسها في اختبارات الوحدة لمحاذاة تجهيزات العميل والخادم عبر اللغات. ولأن التنفيذ parse نقي من المستوى A، كل استدعاء ناجح يكلف السعر الأساسي المنشور $0.002 بلا رموز نموذج ولا شبكة صادرة. حافظ على resource_size صادقًا وثبّت النطاقات المهيكلة في الاختبارات لتحصل على حساب استئناف قابل للتكرار لعمال الحافة وأدوات CLI ومختبرات HTTP الصفّية دون شحن مكدس كامل لمجرد عدّ البايتات.
حالات التكامل
تجهيزات اختبار البوابة وSDK
ولّد سلاسل Range وContent-Range قياسية في الاختبارات الآلية حتى تتفق قواعد الحافة ومكتبات العميل على الصيغ متعددة الأجزاء واللواحق.
أسئلة تقنية
ما صيغ Range التي تدعمها حاسبة ترويسة HTTP Range؟
وحدة bytes فقط: مغلق بداية-نهاية، مفتوح بداية-، ولاحقة -N، بما في ذلك المجموعات متعددة الأجزاء المفصولة بفواصل حتى 32 جزءًا. تُرفض الوحدات الأخرى.
كيف أبني Range لآخر N بايت؟
اضبط mode على build ومرّر suffix_length (مثل 500) لإصدار bytes=-500. لا ترسل start أو end مع suffix_length.
متى تكون status_hint 206 ومتى 416؟
عند توفير resource_size وكون كل نطاق محلول قابلًا للإرضاء على مورد غير فارغ تكون status_hint 206. إن كان المورد فارغًا أو بدأ أي نطاق بعد النهاية فهي 416.
هل أحتاج resource_size لتحليل ترويسة؟
لا. بدون resource_size ما زلت تحصل على range_header مطبّع وkinds وأطوال النطاقات المغلقة. الأطراف المفتوحة واللواحق تحتاج حجمًا لحل الإزاحات المطلقة وإجمالي bytes_requested.
ما تكلفة حاسبة ترويسة HTTP Range؟
أداة المتصفح مجانية. تستخدم طلبات API رصيد KIT المسبق الدفع بمقدار $0.002 لكل استدعاء ناجح؛ والإدخال غير الصالح لا يُفوتر.