# دوال HTTP وحدوده وأخطاؤه

[English](reference.en.md) · [الدليل القابل للتشغيل](guide.ar.md) · [النشر](deployment.ar.md)

يصف هذا المرجع مكتبة ASPL 0.5.0 الأصلية. استورد `أساسي::ويب` أو
`core::http` في كل ملف يستخدمها، وأهّل الأعضاء بالبادئة القصيرة المكتوبة.
التسميات العربية والإنجليزية للأعضاء والحقول تشير إلى التعريف نفسه.
لا تترجم أسماء المستخدم أو المسارات.

## الأنواع والدوال والقيم الافتراضية

تأخذ `وجهة<C,S>` / `Route<C,S>` و`موجه<C,S>` / `Router<C,S>` و
`سياق<C,S>` / `Context<C,S>` وسيطَي نوع محددين للتطبيق. يقبل C وS القيم
القابلة للتخزين المسموحة، بما فيها السجلات والقوائم والنتائج والمخازن
والمقابض والتسجيلات المدارة. يستبعد السياق الفعلي وقيم الدوال المكشوفة في
كل عمق، بما فيه بيانات التسجيل. هذه عائلات توفرها المكتبة وليست أنواعا
عامة يعرفها المستخدم. إذا لم يمكن استنتاج الوسيطين فاكتبهما صراحة، مثل
`ويب::أنشئ_موجه<منطقي,ص64>([])`. يجب أن تستخدم الوجهات والمعالجات والإعدادات
والحالة هويتَي النوع نفسيهما. يشترك استيراد الوحدة القانونية نفسها في
هوية أنواعها ودوالها.

المعالج دالة مستخدم مسماة على المستوى الأعلى بتوقيع
`دالة(طلب_وارد, سياق<C,S>) -> استجابة_خادم`. مرر اسمها مثل
`handlers::handle` دون استدعائها. لا تلتقط قيمة الدالة بيئة محلية.
صدّر تعريفات الوحدة عبر `شارك` / `share` وتبقى بقية الأسماء خاصة.
يمكن تخزين قيم الدوال العادية وتمريرها وإعادتها ومقارنتها بكلمات المساواة.
يفحص المدقق كل الأهداف الممكنة عبر الوحدات ويرفض المسارات غير الآمنة أو
الحاجبة. لا تجعل دالة تغليف استدعاء C عاديا أو قراءة سطر أو ملف حاجبة
صالحة لمسار المعالج.

السجلات التالية قيم عادية. تبقى بايتات الرسائل والترويسات صالحة بعد انتهاء
الاتصال أو الخدمة. لا منشئ أو حقول عامة للسياق، ولا يدخل المجاميع أو يخرج
من استدعائه أو يقارن أو يعبر استدعاء C عاديا. الوجهة والموجه قيمتان معتمتان
يمكن الاحتفاظ بهما دون حقول عامة أو مقابس حية. حقل نجاح النتيجة
`نجاح` / `ok`، ومحتواها `قيمة` / `value`، وخطؤها `الخطأ` / `error`،
ورمزه `الرمز` / `code`. اقرأ المحتوى بعد فحص النجاح. الرسائل البشرية قد تتغير.

أعلام خيارات العميل الثلاثة `خطأ` افتراضيا ومسار CA فارغ. قائمة مستمعي
إعدادات الخادم فارغة افتراضيا ويجب إكمالها قبل الخدمة. يأخذ منشئ المستمع
عنوانا ومنفذا 1..65535 ويعيد نقلا عاديا ومساري TLS فارغين. يبدأ منشئ طلب
العميل بترويسات ومتن فارغين، ومنشئ الاستجابة بترويسات فارغة وعلم طول تمثيل
غير مفعّل وطول صفر. تضبط الاستجابة النصية Content-Type المحدد وبايتات UTF-8
الدقيقة. لا معاملات اختيارية أو تحويل JSON ضمني.

تتولد الجداول التالية من كتالوج التعريفات المراجع عبر
`python3 tools/generate_http_reference.py`. كتابة الأنواع مشتركة بين
الصفحتين. الأحجام والأعداد ص64، والمدد ص64 بالمللي ثانية. حدود المجالات
مشمولة ولا قيمة تعني بلا حد. MiB يساوي 1048576 بايت.

<!-- catalog:start -->
### `Header` / `ترويسة`

| English / العربية | Type / النوع |
| --- | --- |
| `name` / `اسم` | `string` |
| `value` / `قيمة` | `list<u8>` |

### `QueryEntry` / `عنصر_استعلام`

| English / العربية | Type / النوع |
| --- | --- |
| `name` / `اسم` | `string` |
| `value` / `قيمة` | `string` |
| `has_equals` / `له_يساوي` | `bool` |

### `ClientRequest` / `طلب_عميل`

| English / العربية | Type / النوع |
| --- | --- |
| `method` / `طريقة` | `string` |
| `url` / `رابط` | `string` |
| `headers` / `ترويسات` | `list<Header>` |
| `body` / `متن` | `list<u8>` |

### `IncomingRequest` / `طلب_وارد`

| English / العربية | Type / النوع |
| --- | --- |
| `method` / `طريقة` | `string` |
| `target` / `هدف` | `string` |
| `authority` / `جهة` | `string` |
| `path` / `مسار` | `string` |
| `query` / `استعلام` | `string` |
| `has_query` / `له_استعلام` | `bool` |
| `headers` / `ترويسات` | `list<Header>` |
| `trailers` / `ترويسات_ختامية` | `list<Header>` |
| `body` / `متن` | `list<u8>` |
| `tls` / `اتصال_مشفر` | `bool` |
| `peer_address` / `عنوان_الطرف` | `string` |
| `local_address` / `عنوان_محلي` | `string` |
| `peer_port` / `منفذ_الطرف` | `i64` |
| `local_port` / `منفذ_محلي` | `i64` |
| `listener_index` / `فهرس_مستمع` | `i64` |

### `ClientResponse` / `استجابة_عميل`

| English / العربية | Type / النوع |
| --- | --- |
| `status` / `حالة` | `i64` |
| `headers` / `ترويسات` | `list<Header>` |
| `trailers` / `ترويسات_ختامية` | `list<Header>` |
| `body` / `متن` | `list<u8>` |
| `final_url` / `رابط_نهائي` | `string` |
| `redirect_count` / `عدد_تحويلات` | `i64` |
| `gzip_decoded` / `فك_ضغط_غزيب` | `bool` |
| `encoded_body_bytes` / `بايتات_متن_مرمز` | `i64` |

### `ServerResponse` / `استجابة_خادم`

| English / العربية | Type / النوع |
| --- | --- |
| `status` / `حالة` | `i64` |
| `headers` / `ترويسات` | `list<Header>` |
| `body` / `متن` | `list<u8>` |
| `has_representation_length` / `له_طول_تمثيل` | `bool` |
| `representation_length` / `طول_تمثيل` | `i64` |

### `Listener` / `مستمع`

| English / العربية | Type / النوع |
| --- | --- |
| `address` / `عنوان` | `string` |
| `port` / `منفذ` | `i64` |
| `tls` / `اتصال_مشفر` | `bool` |
| `certificate_file` / `ملف_شهادة` | `string` |
| `key_file` / `ملف_مفتاح` | `string` |

### `ClientOptions` / `خيارات_عميل`

| English / العربية | Type / النوع |
| --- | --- |
| `limits` / `حدود` | `MessageLimits` |
| `timeouts` / `مهل` | `Timeouts` |
| `follow_redirects` / `اتبع_تحويلات` | `bool` |
| `decode_gzip` / `فك_غزيب` | `bool` |
| `use_private_ca` / `استخدم_مرجع_خاص` | `bool` |
| `ca_file` / `ملف_مرجع` | `string` |

### `ServerConfig` / `إعدادات_خادم`

| English / العربية | Type / النوع |
| --- | --- |
| `listeners` / `مستمعون` | `list<Listener>` |
| `limits` / `حدود` | `MessageLimits` |
| `timeouts` / `مهل` | `Timeouts` |

### `RuntimeConfig` / `إعدادات_تنفيذ_ويب`

| English / العربية | Type / النوع | Default / الافتراضي | Range / المجال |
| --- | --- | ---: | --- |
| `vm_memory_bytes` / `بايتات_ذاكرة_آلة` | `i64` | 268435456 | 1048576..1073741824 |
| `backend_memory_bytes` / `بايتات_ذاكرة_خلفية` | `i64` | 134217728 | 1048576..1073741824 |
| `inbound_connections` / `اتصالات_واردة` | `i64` | 128 | 1..4096 |
| `outbound_connections` / `اتصالات_صادرة` | `i64` | 32 | 1..1024 |
| `idle_client_connections` / `اتصالات_عميل_خاملة` | `i64` | 16 | 1..outbound_connections / اتصالات_صادرة |
| `queued_requests` / `طلبات_منتظرة` | `i64` | 32 | 1..1024 |
| `live_handlers` / `معالجات_حية` | `i64` | 32 | 1..1024 |
| `outbound_operations` / `عمليات_صادرة` | `i64` | 32 | 1..1024 |
| `max_listeners` / `أقصى_مستمعين` | `i64` | 8 | 1..64 |
| `max_routes` / `أقصى_وجهات` | `i64` | 1024 | 1..16384 |
| `trust_configurations` / `إعدادات_ثقة` | `i64` | 16 | 1..128 |
| `tls_file_bytes` / `بايتات_ملف_تشفير` | `i64` | 1048576 | 1..16777216 |
| `query_bytes` / `بايتات_استعلام` | `i64` | 8192 | 1..1048576 |
| `query_entries` / `عدد_عناصر_استعلام` | `i64` | 1024 | 1..16384 |

### `MessageLimits` / `حدود_رسالة`

| English / العربية | Type / النوع | Default / الافتراضي | Range / المجال |
| --- | --- | ---: | --- |
| `target_bytes` / `بايتات_هدف` | `i64` | 8192 | 1..1048576 |
| `header_bytes` / `بايتات_ترويسات` | `i64` | 32768 | 1..1048576 |
| `header_fields` / `عدد_ترويسات` | `i64` | 100 | 1..4096 |
| `chunk_line_bytes` / `بايتات_سطر_جزء` | `i64` | 1024 | 1..65536 |
| `body_bytes` / `بايتات_متن` | `i64` | 16777216 | 1..1073741824 |
| `decoded_body_bytes` / `بايتات_متن_مفكوك` | `i64` | 16777216 | 1..1073741824 |
| `informational_responses` / `عدد_استجابات_تمهيدية` | `i64` | 8 | 1..64 |
| `max_redirect_hops` / `أقصى_تحويلات` | `i64` | 5 | 0..32 |

### `Timeouts` / `مهل`

| English / العربية | Type / النوع | Default / الافتراضي | Range / المجال |
| --- | --- | ---: | --- |
| `total_ms` / `مهلة_كلية` | `i64` | 30000 | 1..86400000 |
| `connect_ms` / `مهلة_اتصال` | `i64` | 10000 | 1..86400000 |
| `tls_ms` / `مهلة_تشفير` | `i64` | 10000 | 1..86400000 |
| `headers_ms` / `مهلة_ترويسات` | `i64` | 10000 | 1..86400000 |
| `body_ms` / `مهلة_متن` | `i64` | 30000 | 1..86400000 |
| `write_ms` / `مهلة_كتابة` | `i64` | 10000 | 1..86400000 |
| `idle_ms` / `مهلة_خمول` | `i64` | 30000 | 1..86400000 |
| `drain_ms` / `مهلة_تصريف` | `i64` | 5000 | 1..86400000 |
| `cleanup_ms` / `مهلة_تنظيف` | `i64` | 1000 | 1000..86400000 |

### Functions / الدوال

| English / العربية | Signature / التوقيع |
| --- | --- |
| `runtime_config` / `إعدادات_تنفيذ` | `() -> RuntimeConfig` |
| `message_limits` / `حدود_رسائل` | `() -> MessageLimits` |
| `timeouts` / `مهل_افتراضية` | `() -> Timeouts` |
| `client_options` / `خيارات_طلب` | `() -> ClientOptions` |
| `server_config` / `إعدادات_خدمة` | `() -> ServerConfig` |
| `listener` / `أنشئ_مستمع` | `(string, i64) -> result<Listener>` |
| `configure` / `اضبط` | `(RuntimeConfig) -> result<unit>` |
| `client_request` / `أنشئ_طلب` | `(string, string) -> result<ClientRequest>` |
| `request` / `اطلب` | `(ClientRequest, ClientOptions) -> result<ClientResponse>` |
| `response` / `أنشئ_استجابة` | `(i64, list<u8>) -> result<ServerResponse>` |
| `text_response` / `استجابة_نصية` | `(i64, string, string) -> result<ServerResponse>` |
| `encode_utf8` / `رمز_نص` | `(string) -> list<u8>` |
| `decode_utf8` / `فك_نص` | `(list<u8>) -> result<string>` |
| `header` / `أنشئ_ترويسة` | `(string, list<u8>) -> result<Header>` |
| `text_header` / `ترويسة_نصية` | `(string, string) -> result<Header>` |
| `header_values` / `قيم_ترويسة` | `(list<Header>, string) -> result<list<list<u8>>>` |
| `query_entries` / `عناصر_استعلام` | `(string) -> result<list<QueryEntry>>` |
| `query_values` / `قيم_استعلام` | `(list<QueryEntry>, string) -> list<string>` |
| `route` / `أنشئ_وجهة` | `(string, string, fn(IncomingRequest, Context<C,S>) -> ServerResponse) -> result<Route<C,S>>` |
| `router` / `أنشئ_موجه` | `(list<Route<C,S>>) -> result<Router<C,S>>` |
| `with_catch_all` / `أضف_معالج_عام` | `(Router<C,S>, fn(IncomingRequest, Context<C,S>) -> ServerResponse) -> result<Router<C,S>>` |
| `serve` / `اخدم` | `(ServerConfig, Router<C,S>, C, S) -> result<unit>` |
| `read_config` / `اقرأ_إعدادات` | `(Context<C,S>) -> C` |
| `read_state` / `اقرأ_حالة` | `(Context<C,S>) -> S` |
| `replace_state` / `استبدل_حالة` | `(Context<C,S>, S) -> unit` |
| `stop` / `أوقف` | `(Context<C,S>) -> unit` |
| `check_response` / `تحقق_استجابة` | `(Context<C,S>, IncomingRequest, ServerResponse) -> result<unit>` |
<!-- catalog:end -->

## البايتات والترويسات والاستعلام

المتن قيمة كاملة مخزنة في `قائمة<ط8>`. ينسخ `رمز_نص` UTF-8 بدقة، ويرفض
`فك_نص` النص غير الصالح بالرمز `http.invalid_utf8`. لا يحذفان BOM أو NUL
ولا يطبّعان Unicode أو يخمنان الترميز أو يستبدلان البايتات السيئة.
JSON نص ونوع محتوى صريحان، ولا توفر المكتبة محللا أو مولّدا له.

الترويسات حقول مرتبة قابلة للتكرار، بأسماء ASCII token وقيم بايتات.
تقبل القيم HTAB وASCII القابل للطباعة و0x80..0xFF، وترفض NUL وCR وLF
وDEL وبقية التحكم. يحذف التحليل SP وHTAB المحيطين ويحتفظ بالداخل والترتيب
وحالة أحرف الاسم. يعيد `قيم_ترويسة` كل المطابقات بالترتيب دون اعتبار لحالة
الاسم، ولا يجمعها بفواصل أو يفك نصها. تبقى Set-Cookie المكررة منفصلة،
وكذلك الترويسات الختامية عن الأولى.

لا يضبط التطبيق Content-Length أو Transfer-Encoding أو Connection أو
Keep-Alive أو Proxy-Connection أو TE أو Trailer أو Upgrade أو Expect في
الرسائل الصادرة، ولا Host في طلب العميل. تستنتج المكتبة Host والتأطير
وتضيف Date لاستجابة الخادم عند غيابه. Content-Encoding اختيار صريح، ولا
ضغط تلقائيا للخادم. يفشل تعارض الأطوال أو جمع Transfer-Encoding مع
Content-Length أو طي الحقول أو التأطير الملتبس. تبقى ترويسات التحكم الواردة
بيانات قابلة للقراءة. لا تنقل طول المتن المضغوط أو ترويسة ترميزه عميانا
إلى استجابة جديدة.

URL العميل URI مطلق ASCII لـHTTP أو HTTPS. رمز النص غير ASCII في المسار
والاستعلام بنسبة مئوية، وقدّم الأسماء الدولية بصيغة A-label. تدعم أسماء
DNS وIPv4 وIPv6 بين قوسين مربعين. ترفض بيانات المستخدم والفراغ والتحكم
والهروب السيئ والمنفذ غير الصالح ومعرفات منطقة IPv6. يحذف fragment ويصبح
المسار الفارغ `/`. يحتفظ الطلب الأول بالنقاط والشرطات وهروب النسبة.
يحذف `رابط_نهائي` fragment ويصغر أحرف البروتوكول واسم DNS ويحذف المنفذ
الافتراضي ويستعمل `/` للفارغ، مع حفظ وجود الاستعلام وكتابة الهروب.

يحفظ `هدف` الطلب ترميز origin-form أو absolute-form لـHTTP وHTTPS،
ويقبل OPTIONS أيضا `*`. يُستخرج المسار والاستعلام قبل الفك. تأتي `جهة`
من الهدف المطلق أو Host الصالح. يميز `له_استعلام` بين `/p` و`/p?`.
لا تغير الترويسات الممررة هذه الحقول أو معلومات TLS والعنوان الفعلية.
فهارس المستمعين تبدأ من صفر. يفشل الهدف غير الصالح قبل المعالج.

يقسم `عناصر_استعلام` النص الخام عند `&` وأول `=` قبل فك النسبة مرة واحدة.
لا تمرر `?` الأول. يبقى `+` علامة جمع و`;` بيانات، وتبقى `%26` داخل
العنصر وتصبح `%252F` القيمة `%2F`. لا تنتج المقاطع الفارغة عناصر.
يختلف `flag` عن `flag=` بحقل `له_يساوي`، ويكون اسم `=x` فارغا.
يحفظ تكرار الأسماء الترتيب، و`%00` قيمة NUL صالحة. يبقى الاستعلام الخام
متاحا إذا فشل الهروب أو UTF-8 المفكوك. يطابق `قيم_استعلام` الاسم المفكوك
تماما ويعيد قيمة فارغة للمفتاح دون مساواة.

## التوجيه والاستجابات

الطرق ASCII tokens غير فارغة وحساسة لحالة الأحرف. لا يدعم CONNECT أو
ترقية البروتوكول. تتطابق المسارات المرمزة تماما، بما فيه حالة الهروب
والشرطات والنقاط. تختلف `/a%2Fb` و`/a%2fb` و`/a/b` و`/a/../b`.
تبدأ الوجهة بـ`/` دون استعلام أو fragment وبهروب صالح، و`*` لـOPTIONS فقط.
يفشل تكرار زوج الطريقة والمسار أو إضافة معالج عام ثان.

الأولوية للوجهة المطابقة، ثم HEAD باستخدام GET، ثم 405 لمسار معروف، ثم
المعالج العام للمسار المجهول أو 404 الافتراضي. يتقدم HEAD الصريح.
ترتب Allow الطرق حسب البايتات وتضيف HEAD عند وجود GET دون اختراع OPTIONS.
المتنان الافتراضيان `Not found` و`Method not allowed` مع
`text/plain; charset=utf-8`. لا يصل طلب غير صالح إلى المعالج العام.

حالات المعالج النهائية 200..599. استجابة عميل مكتملة 404 أو 500 نتيجة
ناجحة. يستهلك الردود التمهيدية ضمن الحدود، ويرفض 101 وإصدارات السلك غير
المدعومة. يحذف HEAD المتن بعد الفحص والمحاسبة. يحسب بديل GET طول المتن،
ويمكن لـHEAD الصريح أو العام التصريح بطول تمثيل أو حذفه. يجب أن يطابق
الطول المصرح متن HEAD غير الفارغ. يتطلب علم طول التمثيل غير المفعّل طولا صفرا.

تتطلب 204 و205 و304 متنا فارغا. تحذف 204 Content-Length وتضع 205 صفرا،
ويمكن لـ304 التصريح بطول تمثيل أو حذفه. يسمح بهذا الطول فقط لـHEAD و304
ويجب ألا يكون سالبا. تتقدم قواعد الحالة على بديل HEAD. يعيد العميل في
الردود دون متن متنا فارغا وعدد بايتات مرمزة صفرا وعلم gzip غير مفعّل، دون
حجز أو فك التمثيل الافتراضي. ما زالت 205 تتطلب تأطيرا صالحا لرسالة فارغة.

يفحص `تحقق_استجابة` حدود الخدمة والبيانات دون إرسال، ويقبل طلب استدعائه
فقط وفق هويته المخفية. تحتفظ النسخ بالهوية ولا يغير تعديل الطريقة العامة
سلطة HEAD الفعلية. يفشل طلب استدعاء آخر أو سجل أنشأه التطبيق بالرمز
`http.invalid_argument`. يعاد الفحص عند العودة. تنتج الاستجابة غير الصالحة
أو المتجاوزة 500 عاما محدودا مع إغلاق الاتصال. يبقى فخ ASPL نهائيا.

قبل المعالج، يستخدم الطلب السيئ 400، والهدف الكبير 414، والترويسات الكبيرة
431، والمتن الكبير 413، والنقل أو CONNECT غير المدعوم 501، والتوقعات 417،
وإصدار HTTP غير المدعوم 505. يتلقى Expect: 100-continue الصالح المقبول
100 قبل المتن. قد تعيد مهلة المرحلة 408 ما دامت الكلية حية، ويعيد الطلب
المكتمل دون سعة انتظار أو معالجة 503. تغلق الاتصالات المرفوضة، وتكون متون
الرفض الثابتة فارغة. قد يفشل قبول النقل أو TLS أو انتهاء الأب أو قطع
الاتصال أو نفاد الميزانية دون رد HTTP.

## التحويلات وgzip وإعادة الاستخدام

اتباع التحويلات وفك gzip غير مفعّلين افتراضيا. يتبع التفعيل
301/302/303/307/308 داخل origin واحد وفق البروتوكول والمضيف والمنفذ الفعلي.
تحل المراجع النسبية مع معالجة النقاط الحرفية. تحول 301 و302 POST إلى GET
وتحذف متنه وتبقي بقية الطرق. تحافظ 303 على HEAD أو تختار GET وتحذف المتن.
تعيد 307 و308 الطريقة والبايتات نفسها. عند حذف المتن تحذف Content-Type
وContent-Encoding وContent-Language وContent-Location وContent-Range وDigest
وContent-Digest ويعاد اشتقاق التأطير.

غياب Location يعيد الرد. يفشل تكرارها أو خطؤها أو عدم صلاحية وجهتها.
Location النسبي الفارغ صالح لكنه محدود بعدد الخطوات. تعاد الوجهة الصالحة
خارج origin دون اتباع، بما فيه HTTPS إلى HTTP. يعد `عدد_تحويلات` الانتقالات
المتبعة و`رابط_نهائي` آخر URL مطلوب. تشترك الخطوات في المهلة الكلية الأصلية.
لا إعادة تلقائية لطلب التطبيق عند فشل النقل أو اتصال معاد الاستخدام.

عند تعطيل الفك تعاد البايتات المرمزة دون توليد Accept-Encoding.
عند تفعيله تولد `Accept-Encoding: gzip` وترفض قيمة التطبيق لها.
غياب الترميز أو identity وحدها يبقي البايتات. يفك gzip واحد دون اعتبار لحالة
الاسم. يفشل التراكم والتكرار والترميز الآخر. يفحص اكتمال الأعضاء والبصمات
ويقبل الأعضاء المتتابعة الصالحة ويرفض البتر والبيانات الزائدة.
تحتفظ الترويسات والختامية ببيانات الضغط الأصلية. لا يعد `بايتات_متن_مرمز`
تأطير النقل، ويكون `متن` مفكوكا فقط عندما يكون `فك_ضغط_غزيب` مفعّلا.
يطبق حدي المتن المرمز والمفكوك قبل قبول البايتات التالية.

إعادة الاستخدام محدودة ومملوكة للتنفيذ. يشمل مفتاحها origin وهوية ثقة TLS
الفعلية. يجب استهلاك التأطير الكامل الصالح أو إغلاق المقبس. تنتهي الاتصالات
الخاملة أو تطرد. تحرر عودة `اخدم` العادية الخادم وأبناءه، وقد تبقى موارد
عميل مستقلة حتى نهاية التنفيذ. لا مقبض عام للمقبس أو التيار أو إغلاق العميل.

## الحالة والحدود والمهل

تعيد `اقرأ_إعدادات` و`اقرأ_حالة` نسختين من القيم. لا ينشر تعديل النسخة
حالة. تنشر `استبدل_حالة` استبدالا كاملا متسلسلا، ولا تجعل القراءة والانتظار
والاستبدال ذرية. تحتفظ المقابض المدارة في النسخ بالمالك الأصلي نفسه دون
نسخ حالته الأصلية القابلة للتغيير. البايتات المستخرجة قيم مستقلة.
تنتهي سلطة السياق بانتهاء استدعاء المعالج.

يمكن لـ`اضبط` استبدال إعدادات التنفيذ الصالحة قبل أول محاولة شبكة متحققة.
تثبت المحاولة الإعدادات حتى عند فشل البدء. لا تبدأ الأدوات النقية الشبكة.
يسمح التنفيذ باستدعاء `اخدم` واحد حتى إن فشل، وطلبات العميل قبله وفيه وبعده.
تنسخ الخيارات والمستمعون والموجه والإعدادات لكل عملية أو خدمة.

ذاكرة الآلة 256 MiB والخلفية المشتركة 128 MiB افتراضيا. تشمل محاسبة الأصل
السعات المحتفظ بها والقمم المؤقتة وحالة TLS وDNS والفك والأحداث.
تحسب قيم ASPL الحية ضمن الآلة. مخازن المقابس في النواة خارج محاسبة الحجز،
لكن المقابس المقبولة والخاملة ضمن الأعداد المحدودة. لا تتجاوز قائمة انتظار
الاستماع المطلوبة لكل مستمع `طلبات_منتظرة` وقد يخفضها المضيف.
يرفض امتلاء الانتظار أو المعالجات أو العمليات الصادرة القبول بدلا من إنشاء
طوابير مخفية. قد تقيد حدود المضيف والذاكرة الفعلية إعدادا عدديا صالحا؛
لا يحجز الإعداد موارده ولا يضمن قبول العمل.
يجب أيضا ألا تتجاوز `اتصالات_عميل_خاملة` قيمة `اتصالات_صادرة`. عند خفض
سعة الصادر إلى أقل من 16، اخفض عدد الخامل الافتراضي معها وإلا أعادت
`اضبط` الرمز `http.invalid_argument`. يثبت المثال المفحوص
[limits.aspl](../examples/http/ar/limits.aspl) الرفض والتصحيح.

المهل زمن رتيب. تبدأ كلية العميل عند الاستدعاء وكلية الخادم عند أول بايت
طلب وتشمل الانتظار وCPU والطلبات الصادرة والكتابة. تشمل مهلة الاتصال
DNS وTCP وTLS معا. قد تقصر مهلة TLS أو الترويسات أو المتن أو الكتابة المهلة
الأصلية ولا تمددها. يقيد الأب أبناءه. تسبق مصافحة TLS للخادم كلية أول بايت.
تغطي مهلة الخمول غياب النشاط والتصريف انتظار الإيقاف. يستخدم التنظيف مهلة
أصلية واحدة لكل الموارد في نطاق الملكية، افتراضها وأدناها 1000 ms.
الاستقصاء كل 10 ms هدف استجابة وليس ضمانا للزمن الحقيقي.

يلغي انتهاء الأب أو قطع الاتصال أو انتهاء التصريف استدعاءه وأبناءه ويلغي
النتائج المتأخرة ونشر الحالة، وتبقى المعالجات الأخرى حية. لا يسلم نتيجة
فاشلة إلى الأب الملغى. إغلاق جهة استقبال فقط لا يثبت قطع الاتصال.
يصرّف الإيقاف الصريح ويعود عاديا بعد التحرير. الإشارة الأولى تصرّف ثم تنهي
التنفيذ بالحالة 7 والثانية تتجاوز التصريف. حالة الفخ 5 ولا يصبح 500 تلقائيا.
تبقى حدود الآلة وفشل الحجز أو الثوابت وفشل التنظيف المحدود نتائج نهائية.

## مدخلات TLS

يفحص عميل TLS 1.2 و1.3 السلسلة والتواريخ وSAN للاسم أو IP دائما.
يحمل الخادم سلسلة PEM ومفتاحا غير مشفر مطابقا لكل مستمع. تدعم مفاتيح
rsaEncryption العادية 2048..8192 بت وأسّا فرديا أكبر من واحد لا يتجاوز
32 بت. تدعم منحنيات P-256 وP-384 وP-521 المسماة. تدعم توقيعات RSA-PSS
بمفتاح RSA عادي، وترفض مفاتيح rsassaPss المقيدة وEd25519 وEd448 والمنحنيات
الأخرى ومعاملات المنحنى الصريحة.

حد ملف TLS الافتراضي 1 MiB ومجاله 1..16 MiB. للمفتاح أيضا حد 65536 بايت،
وللمسار أقل من 4096 بايت. حد كتلة PEM المحلية 65536 بايت وشهادة DER
49152 بايت ورسالة مصافحة شهادات الطرف المقابل 524288 بايت. حد شهادات الثقة
8192 بما فيها التكرار ولسلسلة المستمع ثماني شهادات ولـCA الوسيطة ست.
يفحص مجلد الثقة حتى 16384 عنصرا و8192 ملفا عاديا فريدا.
راجع [اكتشاف الثقة وتوقيت الفشل](deployment.ar.md).

## أخطاء مستقرة قابلة للاسترداد

الرموز ASCII مستقلة عن لغة التشخيص. تعيد المنشئات والأدوات وعمليات الشبكة
نتائج عادية قابلة للاسترداد للإخفاقات المتوقعة التالية. قد يفشل الطلب بعد
تنفيذ الطرف المقابل له، ولا ضمان للتراجع هناك. ينظف فشل مضيف الخدمة غير
المتوقع مواردها قبل عودة `اخدم` بالرمز `http.host_failure`.

| Code / الرمز | Meaning / المعنى |
| --- | --- |
| `http.invalid_argument` | إعدادات أو مجال أو مستمع أو جمع خيارات غير صالح |
| `http.invalid_url` | URL عميل غير صالح |
| `http.invalid_header` | ترويسة صادرة غير صالحة أو ممنوعة |
| `http.invalid_route` | طريقة أو مسار أو تسجيل غير صالح |
| `http.duplicate_route` | زوج طريقة ومسار مكرر أو معالج عام ثان |
| `http.invalid_response` | حالة أو متن أو بيانات تمثيل المعالج غير صالحة |
| `http.invalid_utf8` | بايتات التحويل أو الاستعلام ليست UTF-8 صالحا |
| `http.invalid_query` | هروب نسبة غير صالح |
| `http.query_limit` | تجاوز بايتات الاستعلام أو عدد عناصره |
| `http.resolve_failed` | فشل حل اسم العميل أو المستمع |
| `http.connect_failed` | فشل إنشاء TCP أو النقل القائم |
| `http.tls_verify_failed` | فشل فحص السلسلة أو التواريخ أو SAN أو الهوية |
| `http.tls_handshake_failed` | فشل تفاوض TLS غير التحقق والمهلة |
| `http.ca_load_failed` | ثقة غائبة أو سيئة أو غير مقروءة أو كبيرة |
| `http.tls_config_failed` | سلسلة أو مفتاح خادم سيئ أو مشفر أو غير مطابق |
| `http.timeout` | انتهاء مهلة عميل كلية أو مرحلية مع بقاء المستدعي حيا |
| `http.cancelled` | إلغاء محلي لابن مع بقاء المستدعي حيا |
| `http.parse_failed` | صياغة أو تأطير أو ختامية غير صالحة أو ملتبسة |
| `http.truncated_body` | انتهى متن ذو طول أو أجزاء قبل اكتماله |
| `http.unsupported_protocol` | إصدار سلك أو ترقية أو نفق أو نقل غير مدعوم |
| `http.unsupported_content_encoding` | ترميز متراكم أو مكرر أو غير مدعوم أثناء الفك |
| `http.decode_failed` | فشل بصمة gzip أو بتره أو عضوه أو بياناته الزائدة |
| `http.body_limit` | تجاوز المتن المرسل أو المستلم المرمز حده |
| `http.decoded_body_limit` | تجاوز المتن المفكوك حده |
| `http.header_limit` | تجاوز حد الترويسات أو الحقول أو سطر الجزء أو الردود التمهيدية |
| `http.target_limit` | تجاوز URL أو هدف الطلب حده |
| `http.resource_limit` | نفاد ميزانية الخلفية أو سعة إعدادات أو مخبأ محدود |
| `http.overloaded` | غياب سعة قبول عميل أو خادم |
| `http.redirect_invalid` | قيم Location متعددة أو سيئة أو غير قابلة للاستخدام |
| `http.redirect_limit` | تجاوز الانتقال المؤهل التالي حد التحويلات |
| `http.bind_failed` | تعذر ربط كل عناوين المستمع المحلولة |
| `http.listen_failed` | تعذر بدء الاستماع على عنوان مربوط |
| `http.already_started` | إعدادات تنفيذ ثابتة أو استدعاء خدمة ثان أو متداخل |
| `http.host_failure` | فشل مضيف أو خدمة غير متوقع بعد التنظيف |

## مستبعدات الإصدار الأول

HTTP/1.1 أصلي فقط. لا شبكة للمتصفح أو التضمين الخاص، ولا HTTP/2 أو HTTP/3
أو CONNECT أو WebSocket أو ترقية أخرى، ولا واجهة بث للمتن أو أدوات multipart
أو SSE أو تحليل وتوليد JSON أو معاملات وجهات مسماة أو middleware أو إدارة
تلقائية للكوكيز أو المصادقة أو وكيل صادر أو تحويل IDN تلقائي أو ضغط خادم
أو إعادة تحميل شهادة أو اختيارها بـSNI أو مصادقة بشهادة عميل أو اتباع
تحويلات تلقائي خارج origin.

تحدد [أدلة الأصل الحالية](deployment.ar.md#الأدلة-وإعداد-الإصدار) أهلية الخلفية
المثبتة وبوابة التحقق التجميعي النهائي المتبقية.
