واجهة HTTP وحدودها وأخطاؤها
لبات 0.7.0 · الإصدار الحالي
تواقيع 0.7.0 الأصلية المنشورة وحدود الرسائل والمعالجات ومالكو الجلسات واللقطات والإخفاقات القابلة للاسترداد.
محتويات الصفحة
الخدمة الأصلية ومالكو الجلسات
المضيف الأصلي فقط، لبات 0.7.0 المنشور. اقرأ دليل HTTP ومجموعة الأمثلة ومتطلبات المضيف. يرفض المتصفح والتضمين الخاص HTTP قبل التنفيذ بالسبب unsupported-supplied-library-profile.
تدير اخدم المعالجات حتى الإغلاق وتعيد نتيجة<وحدة> بعد تحرير الخادم والعمل التابع. تكمل ابدأ البدء وتعيد نتيجة<جلسة<C,S>>، ويكون المستمعون جاهزين عند نجاحها. لا تعمل المعالجات إلا حين يستدعي التطبيق تقدم؛ لا تشغل صيانة النقل أثناء الإدخال أو الرسم معالجات مصدر. تخضع تقدم لميزانية محدودة. تجمّد محاولة الشبكة المجتازة للتحقق اضبط، وتستهلك محاولة الخدمة المجتازة للتحقق فرصة الخدمة الوحيدة حتى إن فشل الربط أو TLS بعدها. لا يستهلك رفض التحقق الخالص الفرصة ولا يجمد الإعدادات. تعمل طلبات العميل قبل الخدمة وداخلها وبعدها.
جلسة<C,S> / Session<C,S> مالك مدار معتم. تشترك نسخه في المورد الأصلي والإغلاق. يمكن الاحتفاظ به في قيم التطبيق، لكنه لا يدخل وسيطَي نوع الإعدادات والحالة في أي عمق. لا منشئ أو حقول عامة أو مساواة أو تحويل C عادي. يغلق فقدان آخر نسخة قابلة للوصول المورد، وينهي التنفيذ صلاحية المالكين أيضا. تبقى الذاكرة الأصلية محسوبة حتى سكون التحرير. تحتفظ نسخ الإعدادات والحالة بالمقابض المدارة نفسها، ولا تنسخ الموارد الأصلية المتغيرة.
عمليات التطبيق فقط هي ابدأ وتقدم وأوقف_الجلسة وأغلق_الجلسة وإعداد_الجلسة وحالة_الجلسة واستبدل_حالة_الجلسة والتقط_حالة_الجلسة واستبدل_حالة_الجلسة_إن_كانت_حالية. تأخذ عمليات المعالج سياق استدعائه: اقرأ_إعدادات واقرأ_حالة واستبدل_حالة والتقط_الحالة واستبدل_الحالة_إن_كانت_حالية وأوقف وتحقق_استجابة. يرفض المدقق استدعاءات التطبيق على مسار معالج حتى عبر دوال مساعدة. ينتهي السياق مع استدعائه ولا يخرج منه أو يدخل المجاميع. في برامج رايليب تكون الإعداد والطلب والخدمة والبدء والتقدم والإيقاف والإغلاق خارج الإطار، وتسمح دوال نسخ إعدادات التطبيق وحالته داخل الإطار. تعيد العمليات الممنوعة داخل إطار فعال http.invalid_order. يعيد سياق التطبيق غير الصالح http.invalid_context.
يحوي حالة_جلسة / SessionStatus الثوابت جلسة_تعمل / SESSION_RUNNING وجلسة_تستكمل_الإغلاق / SESSION_DRAINING وجلسة_مغلقة / SESSION_CLOSED. تطلب أوقف_الجلسة التصريف؛ استمر في تقدم حتى الإغلاق. تنهي أغلق_الجلسة الصلاحية وتحرر المالك وتبطل كل نسخه. يعيد تقدم المغلقة حالتها المغلقة وينجح تكرار الإيقاف والإغلاق. تعيد دوال حالة المغلقة وإعداداتها http.closed_session. يبقى فشل المضيف المحرر بأمان مسجلا. فشل التحرير النهائي ليس نتيجة قابلة للاسترداد.
تعيد اقرأ_حالة وحالة_الجلسة قيما منسوخة؛ لا ينشر تعديلها شيئا. يستبدل النشر غير المشروط الحالة كاملة. للنوع لقطة_حالة<S> / StateSnapshot<S> حقل قيمة / value للقراءة فقط وهوية جلسة وإصدار خفيان. تبقى اللقطة بعد الإغلاق ولا تمنح صلاحية السياق. يزيد كل نشر ناجح الإصدار. يعيد الاستبدال الشرطي نجاحا بقيمة صواب للقطة الحالية، ونجاحا بقيمة خطأ للقطة قديمة من الجلسة نفسها، أو فشلا بالرمز http.invalid_argument للقطة جلسة أخرى. القراءة والانتظار لطلب صادر ثم الاستبدال ليست ذرية؛ استخدم النشر الشرطي لكشف التغييرات أثناء الانتظار. راجع مثال الجلسة.
الأنواع والدوال والقيم الافتراضية
تأخذ وجهة<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 ضمني.
تتولد الجداول التالية من كتالوج التعريفات العامة المراجع. كتابة الأنواع مشتركة بين الصفحتين. الأحجام والأعداد ص64، والمدد ص64 بالمللي ثانية. حدود المجالات مشمولة ولا قيمة تعني بلا حد. MiB يساوي 1048576 بايت.
ProgressBudget / ميزانية_تقدم
| English / العربية | Type / النوع | Default / الافتراضي | Range / المجال |
|---|---|---|---|
max_instructions / حد_التعليمات |
i64 |
4096 | 1..1048576 |
active_ms / زمن_العمل_مللي |
i64 |
2 | 1..1000 |
wait_ms / زمن_الانتظار_مللي |
i64 |
0 | 0..1000 |
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 / التوقيع |
|---|---|
progress_budget / ميزانية_التقدم |
() -> ProgressBudget |
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> |
snapshot_state / التقط_الحالة |
(Context<C,S>) -> StateSnapshot<S> |
snapshot_session_state / التقط_حالة_الجلسة |
(Session<C,S>) -> result<StateSnapshot<S>> |
replace_session_state / استبدل_حالة_الجلسة |
(Session<C,S>, S) -> result<unit> |
replace_state_if_current / استبدل_الحالة_إن_كانت_حالية |
(Context<C,S>, StateSnapshot<S>, S) -> result<bool> |
replace_session_state_if_current / استبدل_حالة_الجلسة_إن_كانت_حالية |
(Session<C,S>, StateSnapshot<S>, S) -> result<bool> |
start / ابدأ |
(ServerConfig, Router<C,S>, C, S) -> result<Session<C,S>> |
session_config / إعداد_الجلسة |
(Session<C,S>) -> result<C> |
session_state / حالة_الجلسة |
(Session<C,S>) -> result<S> |
close_session / أغلق_الجلسة |
(Session<C,S>) -> result<unit> |
progress / تقدم |
(Session<C,S>, ProgressBudget) -> result<SessionStatus> |
stop_session / أوقف_الجلسة |
(Session<C,S>) -> result<unit> |
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> |
البايتات والترويسات والاستعلام
المتن قيمة كاملة مخزنة في قائمة<ط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 عاما محدودا مع إغلاق الاتصال. يبقى فخ لبات نهائيا.
قبل المعالج، يستخدم الطلب السيئ 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 والفك والأحداث.
تحسب قيم لبات الحية ضمن الآلة. مخازن المقابس في النواة خارج محاسبة الحجز،
لكن المقابس المقبولة والخاملة ضمن الأعداد المحدودة. لا تتجاوز قائمة انتظار
الاستماع المطلوبة لكل مستمع طلبات_منتظرة وقد يخفضها المضيف.
يرفض امتلاء الانتظار أو المعالجات أو العمليات الصادرة القبول بدلا من إنشاء
طوابير مخفية. قد تقيد حدود المضيف والذاكرة الفعلية إعدادا عدديا صالحا؛
لا يحجز الإعداد موارده ولا يضمن قبول العمل.
يجب أيضا ألا تتجاوز اتصالات_عميل_خاملة قيمة اتصالات_صادرة. عند خفض
سعة الصادر إلى أقل من 16، اخفض عدد الخامل الافتراضي معها وإلا أعادت
اضبط الرمز http.invalid_argument. يثبت المثال المفحوص
limits.aspl الرفض والتصحيح.
المهل زمن رتيب. تبدأ كلية العميل عند الاستدعاء وكلية الخادم عند أول بايت طلب وتشمل الانتظار وCPU والطلبات الصادرة والكتابة. تشمل مهلة الاتصال DNS وTCP وTLS معا. قد تقصر مهلة TLS أو الترويسات أو المتن أو الكتابة المهلة الأصلية ولا تمددها. يقيد الأب أبناءه. تسبق مصافحة TLS للخادم كلية أول بايت. تغطي مهلة الخمول غياب النشاط والتصريف انتظار الإيقاف. يستخدم التنظيف مهلة أصلية واحدة لكل الموارد في نطاق الملكية، افتراضها وأدناها 1000 ms. الاستقصاء كل 10 ms هدف استجابة وليس ضمانا للزمن الحقيقي.
يلغي انتهاء الأب أو قطع الاتصال أو انتهاء التصريف استدعاءه وأبناءه ويلغي النتائج المتأخرة ونشر الحالة، وتبقى المعالجات الأخرى حية. لا يسلم نتيجة فاشلة إلى الأب الملغى. إغلاق جهة استقبال فقط لا يثبت قطع الاتصال. يصرّف الإيقاف الصريح ويعود عاديا بعد التحرير. الإشارة الأولى تصرّف ثم تنهي التنفيذ بالحالة 7 والثانية تتجاوز التصريف. حالة الفخ 5 ولا يصبح 500 تلقائيا. تبقى حدود الآلة وفشل الحجز أو الثوابت وفشل التنظيف المحدود نتائج نهائية.
الإعدادات والبدء
استخدم configure(RuntimeConfig) قبل أول محاولة شبكة اجتازت التحقق. تعيد المجالات غير الصالحة أو idle_client_connections > outbound_connections الرمز http.invalid_argument دون تثبيت الإعدادات. تثبت محاولات العميل أو الخدمة المجتازة للتحقق الإعدادات حتى لو فشل بدء النقل؛ يعيد الضبط اللاحق http.already_started. لا تهيئ الأدوات المساعدة والفحص والبناء دون شبكة HTTP. تنسخ الخيارات والمستمعين وإعدادات التطبيق ولا تعمل كإعدادات قابلة للتغيير المباشر.
يتطلب Listener::tls=false مساري شهادة ومفتاح فارغين؛ ويتطلب true كليهما غير فارغ. منفذ المستمع 1..65535، ومستمع IPv6 خاص بـIPv6. يستهلك serve أو start المجتاز للتحقق فرصة الخدمة الوحيدة للتنفيذ. يحرر فشل البدء المستمعين والعمل المنشأين قبل إعادة رمزه المستقر. صحح المدخلات وابدأ تنفيذا جديدا. راجع إعدادات النشر ومثال الحدود.
الثقة الافتراضية والخاصة
يختار ClientOptions الافتراضي اكتشاف CA المضيف، مع use_private_ca=false وca_file فارغ. يتطلب use_private_ca=true مسار CA خاص غير فارغ بصيغة PEM ويحل محل مخزن المضيف. يعطي الجمع غير الصالح للعلم والمسار http.invalid_argument. تعطي الثقة المختارة الغائبة أو المشوهة أو غير المقروءة أو المتجاوزة للحجم http.ca_load_failed قبل الاتصال؛ وتعطي الثقة المحملة غير المتعلقة http.tls_verify_failed أثناء التحقق. لا تعطل هذه الخيارات فحص السلسلة والتاريخ والهوية.
أول حزمة افتراضية موجودة هي المرجع. لا ينتقل الاختيار من حزمة سيئة إلى التالية ولا يغير SSL_CERT_FILE أو SSL_CERT_DIR الاكتشاف. عند غياب الحزم المرشحة كلها يطبق اكتشاف مجلد محدود. تثبت الثقة المحللة بنجاح للتنفيذ. راجع ترتيب الاكتشاف الدقيق والتجهيز المحلي؛ لا تستنتج أن كل ترتيب ثقة لمضيف يعمل.
طلبات الطرف العلوي المرتبطة بالسياق
يتطلب request(ClientRequest, ClientOptions) داخل المعالج إطار طلبه الحي. تعيد read_config(ctx) إعدادات تطبيق الخدمة المنسوخة؛ توفر في عائلة الخدمة رابط الطرف العلوي ومسار CA الصريح. شهادة ومفتاح الخادم الوارد مستقلان عن ثقته الصادرة. يمرر المعالج المفحوص الحالة وبايتات المتن عمدا دون نسخ بيانات تمثيل الطرف المقابل المضغوط.
تبقى ردود 404 و500 الكاملة نتائج عميل ناجحة. يصل فشل الابن القابل للاسترداد إلى الأب الحي كنتيجة عادية؛ يحول المثال رمزه المستقر إلى متن 502. ينقض انتهاء مهلة الأب أو اكتشاف انقطاعه أو انتهاء التصريف عمل الابن ويسقط خرج المعالج ونشره المتأخرين بدلا من تسليم نتيجة فاشلة للمعالج الملغى. لا تمدد مهل الابن مهلة الأب. لا إعادة محاولة تلقائية أو وكيل صادر أو تراجع عن آثار الطرف المقابل. اتبع تمرين الطرف العلوي TLS الكامل.
مدخلات 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 ملفا عاديا فريدا. راجع اكتشاف الثقة وتوقيت فشل البدء.
أخطاء مستقرة قابلة للاسترداد
الرموز 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.closed_session |
دوال حالة التطبيق أو إعداداته بعد الإغلاق المشترك |
http.invalid_context |
عملية خارج سياق التطبيق المسموح |
http.invalid_order |
عملية تستلزم خارج الإطار أثناء إطار رسم فعال |
المستبعدات الحالية
HTTP/1.1 أصلي فقط. لا شبكة للمتصفح أو التضمين الخاص، ولا HTTP/2 أو HTTP/3 أو CONNECT أو WebSocket أو ترقية أخرى، ولا واجهة بث للمتن أو أدوات multipart أو SSE أو تحليل وتوليد JSON أو معاملات وجهات مسماة أو middleware أو إدارة تلقائية للكوكيز أو المصادقة أو وكيل صادر أو تحويل IDN تلقائي أو ضغط خادم أو إعادة تحميل شهادة أو اختيارها بـSNI أو مصادقة بشهادة عميل أو اتباع تحويلات تلقائي خارج origin.
استخدم دليل النشر الحالي لمسارات 0.7.0 الأصلي المنشور. يبقى مصدر النشر الخام السابق (يفتح في نافذة جديدة) بنطاق إصداره السابق.