ضبط المهلات والترويسات
مهلات العميل والترويسات المخصصة ورموز المصادقة
ضبط المهلات والترويسات درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
مهلة على مستوى العميل
اضبط http.Client.Timeout لتحديد إجمالي مدة الطلب والاستجابة. هذه أسهل مهلة يمكن ضبطها.
client := &http.Client{Timeout: 10 * time.Second}المهلات على مستوى النقل
اضبط بدقة مهلات إنشاء الاتصال ومصافحة TLS عبر http.Transport:
t := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 5 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
TLSHandshakeTimeout: 5 * time.Second,
ResponseHeaderTimeout: 5 * time.Second,
}
client := &http.Client{Transport: t, Timeout: 30 * time.Second}مهلة تستند إلى السياق
تكون مهلات السياق خاصة بكل طلب، وتنتقل إلى الاستدعاءات اللاحقة. وتُلغي الطلب عند تجاوز المهلة النهائية.
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)ضبط ترويسات الطلب
أضف الترويسات إلى الطلب باستخدام req.Header.Set (يستبدل) أو req.Header.Add (يلحق):
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)الترويسات الشائعة
Content-Type لنصوص الطلب الأساسية؛ Accept لتحديد تنسيق الاستجابة المطلوب؛ Authorization لرموز المصادقة؛ User-Agent لتحديد هوية العميل.
قراءة ترويسات الاستجابة
اقرأ ترويسات الاستجابة من resp.Header.Get(key):
contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")مهلة الاتصالات الخاملة
اضبط IdleConnTimeout في النقل لإغلاق الاتصالات الخاملة، ومنع تراكمها عند انخفاض حركة المرور.
t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10إعداد TLS
خصّص TLS (الحد الأدنى للإصدار وشهادات العميل) عبر tls.Config في النقل:
t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}اكتشاف أخطاء المهلة
ميّز بين أخطاء المهلة وأخطاء الشبكة باستخدام errors.As:
var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
// handle timeout
}المهلة لكل طلب مقابل مهلة العميل
تنطبق Client.Timeout على كل طلب. أما مهلة السياق فتكون خاصة بكل طلب، ويمكن أن تكون أقصر من مهلة العميل. تُحترم المهلتان — وتفوز الأقصر.
تعطيل إبقاء الاتصال حيًا
اضبط DisableKeepAlives: true في النقل للبرامج قصيرة العمر التي تفتح عددًا قليلًا من الاتصالات، لتجنب تكلفة تجميع الاتصالات.
تحقق سريع
عند ضبط كلٍّ من http.Client.Timeout ومهلة السياق، أيّهما يُطبَّق؟
خلاصة: المهلات والرؤوس
النقاط الأساسية:
- client.Timeout: مهلة الطلب الكاملة لكل طلب
- context.WithTimeout: مهلة قابلة للإلغاء والانتشار
- req.Header.Set لإضافة رؤوس مخصّصة
- Transport للتحكم الدقيق في مهلات TLS والاتصال والاتصالات الخاملة
الأسئلة الشائعة
هل درس «ضبط المهلات والترويسات» مجاني؟
نعم — نص درس «ضبط المهلات والترويسات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «ضبط المهلات والترويسات»؟
مهلات العميل والترويسات المخصصة ورموز المصادقة تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «ضبط المهلات والترويسات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إجراء طلبات HTTP
- ضبط المهلات والترويسات
- فك ترميز استجابات JSON
- معالجة الأخطاء ومنطق إعادة المحاولة