افحص ما إذا كانت طريقة HTTP آمنة أو قابلة للتكرار
اعرف ما إذا كان تكرار طريقة ما يخلو من المفاجآت: تُقرأ put المكتوبة بمسافات على أنها PUT، وهي غير آمنة لكنها قابلة للتكرار، فإرسالها مرتين له الأثر المقصود نفسه لإرسالها مرة واحدة. مجاناً في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
الآمن والقابل للتكرار وعدان مختلفان
الطريقة الآمنة مخصصة لجلب المعلومات أو للسؤال عن الخيارات التي يقدمها الخادم، لا لتغيير أي شيء فيه. وتنتمي HEAD وOPTIONS وTRACE إلى هذه المجموعة، وكل طريقة آمنة قابلة للتكرار أيضاً. أما قابلية التكرار فوعد أوسع: إرسال الرسالة نفسها عدة مرات له الأثر المقصود ذاته لإرسالها مرة واحدة. وتفي PUT وDELETE بهذا الوعد دون أن تكونا آمنتين، لأن حفظ المحتوى نفسه من جديد أو حذف العنصر نفسه مرة أخرى لا يضيف أثراً جديداً.
متى تتحقق قبل إعادة المحاولة
يهم السؤال خصوصاً عندما ينقطع الاتصال ولا تعرف هل تسلّم الخادم الرسالة. قبل تفعيل إعادة المحاولة التلقائية لطريقة ما، افحصها هنا: تحصل على اسم الطريقة بأحرف كبيرة، وهل هي آمنة، وهل هي قابلة للتكرار، ووصف قصير يجمع ذلك. ولا تؤثر حالة الأحرف أو المسافات الزائدة، فتصبح put هي PUT. ومن الأخطاء الشائعة اعتبار قابلية التكرار دليلاً على عدم الضرر: فطريقة DELETE تغيّر البيانات، لكنها لا تغيّرها مرتين. وتُرفض الأسماء المجهولة أو المخترعة بدلاً من تخمينها.
ميّز بين الأمان وقابلية التكرار
يعبّر الأمان وقابلية التكرار بلا أثر إضافي عن ضمانين مختلفين. فالطريقة الآمنة مخصصة لاسترجاع المعلومات أو عرض خيارات الاتصال، لا لطلب تغيير حالة الخادم الأصلي. أما قابلية التكرار فأوسع نطاقاً؛ إذ تعني أن إرسال عدة طلبات متطابقة يُحدث في الخادم الأثر المقصود نفسه الذي يحدثه طلب واحد.
تُعد PUT وDELETE قابلتين للتكرار رغم أنهما غير آمنتين، لأن استبدال تمثيل بتمثيل مطابق مراراً، أو طلب حذف المورد نفسه عدة مرات، لا يضيف أثراً مقصوداً جديداً في كل مرة. تصف هذه الخصائص الدلالة القياسية للطلب، ولا تضمن خلو تنفيذ بعينه من الأخطاء أو الآثار الجانبية العرضية.
فسّر إعادة المحاولة تفسيراً صحيحاً
تفيد قابلية التكرار بلا أثر إضافي بوجه خاص عند تقرير ما إذا كان يجوز لعميل آلي إعادة الطلب بعد تعطل الاتصال. فقد لا يعرف العميل هل استلم الخادم المحاولة الأولى أم لا؛ وتكرار طريقة قابلة للتكرار يحافظ على الأثر المقصود للطلب. لكن ذلك لا يضمن تطابق رموز الحالة أو أجسام الاستجابة.
فمثلاً، قد يحذف طلب DELETE الأول مورداً ويعيد نتيجة نجاح، بينما يبيّن طلب DELETE مطابق لاحق أن المورد لم يعد موجوداً؛ ومع ذلك تظل حالة الخادم النهائية المقصودة واحدة. وتتمتع PUT بالخاصية نفسها عندما تحتفظ الطلبات المتكررة بالوجهة والتمثيل نفسيهما.
حالات الاستخدام
راجع وسيط إعادة المحاولة
افحص طريقة مضبوطة قبل تمكين الإعادة الآلية بعد أعطال نقل لا يُعرف معها مصير الطلب الأول.
الأسئلة الشائعة
لماذا تُعد DELETE قابلة للتكرار مع أن المحاولة الثانية قد تعيد حالة مختلفة؟
تتعلق قابلية التكرار بالأثر المقصود في الخادم لا بتطابق الاستجابات. وتستهدف طلبات الحذف المتكررة الحالة النهائية نفسها للمورد.
هل تُقبل أسماء الطرق المكتوبة بأحرف صغيرة؟
نعم. تحذف الأداة المسافات المحيطة وتوحّد الاسم المدخل إلى الأحرف الكبيرة قبل تصنيفه.
ماذا يحدث لطرق WebDAV أو الطرق المخصصة؟
تُرفض بوصفها غير معروفة. ويجب استمداد خصائصها من المواصفة أو عقد التطبيق الذي يعرّفها.
ما الفرق بين الطريقة الآمنة والطريقة القابلة للتكرار؟
الطريقة الآمنة تكتفي بجلب المعلومات ولا تطلب أي تغيير على الخادم. أما القابلة للتكرار فقد تغيّر شيئاً، لكن إرسالها مرتين له الأثر المقصود نفسه لإرسالها مرة. وPUT وDELETE قابلتان للتكرار دون أن تكونا آمنتين.
ما الطرق التي تتعرف عليها الأداة؟
الطرق القياسية التسع المعرّفة في مواصفات الويب الأساسية ومواصفة PATCH، مثل PUT وPATCH وDELETE وHEAD وOPTIONS وTRACE. وتُتجاهل حالة الأحرف والمسافات المحيطة بالاسم، لذا تُقرأ put على أنها PUT.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev2/http-method-idempotent-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"method":"PUT"}'const res = await fetch("https://api.kit.forhosting.com/dev2/http-method-idempotent-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"method": "PUT"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/http-method-idempotent-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"method": "PUT"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/http-method-idempotent-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"method":"PUT"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"method":"PUT"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/http-method-idempotent-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"method": "PUT"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.http_method_idempotent_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
صنّف طريقة HTTP قياسية بحسب خاصيتي الأمان وقابلية التكرار بلا أثر إضافي كما تحددهما دلالات HTTP. أدخل طريقة مثل GET أو POST أو PUT أو PATCH أو DELETE لتحصل على الاسم الموحّد، ونتيجتين منطقيتين منفصلتين، وتصنيف إجمالي موجز. تتعرف الأداة على الطرق التسع المحددة في المواصفات الأساسية لدلالات HTTP وPATCH، وتتجاهل المسافات المحيطة والفرق بين الأحرف الكبيرة والصغيرة، وترفض الأسماء غير المعروفة بدلاً من افتراض خصائص طرق الامتداد.
ميّز بين الأمان وقابلية التكرار
وتُعد GET وHEAD وOPTIONS وTRACE طرقاً آمنة. كما تقرر دلالات HTTP أن كل طريقة آمنة قابلة للتكرار بلا أثر إضافي، ولذلك تحصل هذه الطرق على التصنيف الموحّد `safe_and_idempotent`. تعرض النتيجة الحقلين `safe` و`idempotent` بصورة منفصلة، فلا تضطر شيفرة السياسات إلى استنتاج إحدى الخاصيتين من تسمية مختصرة. كما تعيد الحقل `classification` للاستعمال في العرض أو التسجيل أو التفرع البسيط.
فسّر إعادة المحاولة تفسيراً صحيحاً
تُصنف POST وPATCH في تعريفهما العام بأنهما غير آمنتين وغير قابلتين للتكرار بلا أثر إضافي. ويمكن لخدمة API محددة أن تصمم عملية POST أو PATCH قابلة لإعادة المحاولة، ربما بواسطة مفتاح تكرار أو طلب مشروط، غير أن هذا العقد الخاص بالتطبيق لا يغيّر الخاصية القياسية الافتراضية للطريقة ذاتها. استخدم النتيجة أساساً على مستوى البروتوكول، ثم طبّق أي ضمانات أقوى توثقها خدمة API التي تتصل بها توثيقاً صريحاً.
تحقق من الاسم قبل تطبيق السياسة
وقد يؤدي تخمين خصائص طريقة امتداد من اسمها إلى السماح بإعادة محاولة غير آمنة أو منع عملية صحيحة. إذا كان نظامك يستخدم طريقة امتداد، فارجع إلى المواصفة التي تسجلها أو تعرّفها وتعامل معها بسياسة صريحة. لا تنفذ الخوارزمية أي طلب شبكي، ولا تفحص خادماً أو مساراً أو ذاكرة تخزين مؤقت أو وسيطاً أو جسم طلب فعلياً. تقبل الأداة الأسماء القياسية CONNECT وDELETE وGET وHEAD وOPTIONS وPATCH وPOST وPUT وTRACE. تُحذف المسافات المحيطة بالإدخال وتُحوّل أحرفه إلى الحالة الكبيرة، ولذلك تُوحّد قيم مثل ` get ` و`patch` من دون تغيير معناها. وتنتج أي قيمة أخرى الخطأ `invalid_input`. تكتسب هذه الصرامة أهميتها من قابلية رموز طرق HTTP للامتداد؛ إذ يعرّف WebDAV وغيره من البروتوكولات طرقاً إضافية، وقد تضيف خدمات API الخاصة رموزاً من إنشائها. وهي حتمية، لذا تلائم أدوات التدقيق، وفحص وثائق API، وإعداد البرمجيات الوسيطة لإعادة المحاولة، وأدوات التعلم في المتصفح. يشترك منفذ المتصفح ومعالج API في المنطق نفسه؛ ويستخدم طلب API السعر الأساسي المنشور وقدره $0.002.
حالات التكامل
دقق وثائق API
قارن الطرق المختارة لنقاط النهاية بالوثائق التي تصف العملية بأنها آمنة أو قابلة للتكرار.
اشرح دلالات HTTP
اعرض خاصيتي الأمان وقابلية التكرار للطرق الشائعة كل واحدة على حدة بواسطة فحص حتمي واحد.
أسئلة تقنية
هل كل طريقة آمنة قابلة أيضاً للتكرار بلا أثر إضافي؟
نعم. تعرّف دلالات HTTP الطرق الآمنة بأنها قابلة للتكرار، ولذلك تجمع GET وHEAD وOPTIONS وTRACE الخاصيتين.
هل PATCH قابلة للتكرار بلا أثر إضافي؟
ليست PATCH قابلة للتكرار افتراضياً. وقد تعرّف خدمة API عملية PATCH تقبل الإعادة، لكن ذلك ضمان خاص بالتطبيق.