ملفات HAR — سجل التحقق من HTTP الذي لم تعرفه بعد

تحديث في

تُسجل ملفات HAR كل طلب HTTP يُرسله متصفحك — الرسائل، التوقيتات، الأجسام المُستجيبة، أذونات التحقق. إليك ما يوجد داخل ملف واحد، وكيف تُسجله، وكيف تستخدمه عندما تُعاني من مشكلة.

ملفات HAR — سجل التحقق من HTTP الذي لم تعرفه حتى الآن 1
إعلان · حذف؟

مكالمة واجهة برمجة التطبيقات الخاصة بك تفشل في البيئة الإنتاجية. تعمل بشكل جيد في curl، وتعمل بشكل جيد محليًا. يفتح الدعم ملفًا ويسألك "لأرسل ملف HAR". تُصمت بثقة وتحتّم "ما هو ملف HAR" في علامة تبويب مختلف.

هذا هو التبويب. إليك ما هو ملف HAR، ما يحتويه، وكيفية استخدامه لتحديد المشكلة الفعلية.

ما هو ملف HAR

HAR تعني HTTP Archive. إنه ملف JSON يسجل كل طلب HTTP قام به متصفحك خلال جلسة — أسماء المواقع، طرق الطلب، أكواد الحالة، عناوين الطلب والرد، جسم الطلب والرد، أكواد الجلسات، وتحليلات الوقت. كل هذا، لكل طلب على الصفحة.

تم توحيد هذا التنسيق من قبل فريق العمل على أداء الويب (النسخة 1.2)، ويُدعم من قبل Chrome، Firefox، Safari، وEdge. فكر فيه كمخرج مُهيكل من مُتتبع الشبكة في متصفحك — نوع من الملفات التي تُرسل إلى شخص يُحلّ المشكلة دون أن يُعطى له وصول SSH إلى جهازك.

يُستخدم ملفات HAR بشكل خاص عندما تكون الفشل متقطعًا، عندما يُظهر فقط في متصفح معين، أو عندما تحتاج إلى إثبات لبائع أن نعم، واجهة برمجية تُرجع حالة 500، وليس خطأ بسيط.

كيفية التقاط ملف HAR

Chrome و Edge

  1. افتح أدوات التطور (Ctrl (left) أو Cmd+Option+I على Mac)
  2. اذهب إلى شبكة تبويب
  3. تفعيل حفظ السجل إذا حدث الفشل بعد إعادة توجيه أو تحميل صفحة
  4. أعد تجربة المشكلة
  5. انقر بزر الماوس الأيمن في قائمة الطلبات → حفظ كل شيء كـ HAR مع المحتوى

Firefox

  1. افتح أدوات التطور → شبكة تبويب
  2. أعد تجربة الطلب
  3. انقر على أيقونة المفتاح → حفظ كل شيء كـ HAR

رحلات السفاري

  1. تمكين قائمة "التطوير": Safari → الإعدادات → متقدم → عرض قائمة التطوير
  2. التطوير → عرض مُراقب الشبكة → الشبكة
  3. أعد تجربة المشكلة
  4. انقر على إصدار الزر (أيقونة المُرشد في شريط الشبكة)

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

ما يحتويه ملف HAR

يُشارك كل ملف HAR نفس هيكل المستوى العلوي:

{
  "log": {
    "version": "1.2",
    "creator": { "name": "Chrome", "version": "124.0.6367.82" },
    "entries": [ ... ]
  }
}

ال entries مصفوفة هي المكان الذي يعيش فيه البيانات المهمة. كل مدخل هو زوج طلب/رد كامل. يُنتج تحميل صفحة عادية 50-200 مدخل؛ يمكن أن يتجاوز ذلك في تطبيقات متكاملة تُحمّل لوحة تحكم.

مُدخل مُلاحظ: الحقول المهمة

إليك تحليلًا للحقول الرئيسية في مدخل واحد من ملف HAR:

مجالالموقعما يخبرك به
startedDateTimeمُدخلالوقت الذي تم فيه إرسال الطلب، بالصيغة ISO 8601 في الوقت العالمي. اربط هذا مع سجلات الخادم لتحديد السطر الدقيق.
timeمُدخلالزمن الكلي بالمليون من الميلي ثانية من بداية الطلب إلى نهاية الرد. الرقم الذي تُستخدمه عند ترتيب الطلبات البطيئة.
serverIPAddressمُدخلالعنوان الذي قام بمعالجة هذا الطلب. مهم خلف مُوزّعات الحمل — يخبرك بـ أي مثال تم الاتصال به.
request.methodالطلبGET، POST، PUT، DELETE، إلخ.
request.urlالطلبالرابط الكامل مع سلسلة الاستعلام. انتبه للإدخال المُكرر بشكل غير مقصود هنا.
request.headersالطلبجميع عناوين الرسائل. يشمل التحقق من التصاريح — توجد فيها وثائق التحقق من الهوية. هذا هو المخاوف الخاصة بالخصوصية.
request.postData.textالطلبالجسم الخام للطلب. بالنسبة للواجهات المبنية على JSON، هذا هو محتوى الطلب. إذا رفض الواجهة المدخل، فانظر إلى هذا أولًا.
response.statusإجابةكود حالة HTTP. 0 عادةً يعني أن الطلب تم منعه قبل الانتهاء.
response.headersإجابةعناوين الرد، بما في ذلك Content-Type, Cache-Control, Set-Cookie. مفيد في تدقيق CORS.
response.content.textإجابةمحتوى الرد. بالنسبة للواجهات المبنية على JSON، هذا هو JSON الخام. قد يكون مُشفّرًا بـ base64 للردات الثنائية.
timings.blockedالوقتالوقت المُستغرق لانتظار مساحة اتصال TCP. القيم العالية تشير إلى استنزاف مصادر الاتصال.
timings.dnsالوقتوقت التحقق من اسم النطاق. أكثر من 50 مللي ثانية يستحق الانتباه؛ أكثر من 200 مللي ثانية هو مشكلة.
timings.connectالوقتوقت الاتصال TCP. القيم العالية = تأخير الشبكة أو تكلفة التشفير، وليس بطء الخادم.
timings.waitالوقتالوقت من إرسال الطلب إلى استلام أول بيت (TTFB). هنا تظهر الواجهات البطيئة. الوقت العالي للـ TTFB = الخادم بطيء في الاستجابة.
timings.receiveالوقتالوقت المطلوب لتحميل جسم الرد. يكون عاليًا فقط إذا كان حجم الرد كبيرًا.

ما يجب أن تبحث عنه فعليًا

عند فتح ملف HAR، غالبًا ما تبحث عن أحد الثلاثة التالي:

الطلب الذي يفشل

تُرتّب أو تُتصفّح وفقًا لـ response.status. في أدوات تطوير Chrome يمكنك التصفّح مباشرة مع status-code:4xx أو status-code:5xx. بمجرد أن تجد الطلب المُفشّل، اقرأ كامل response.content.text — عادةً ما تكون رسالة الخطأ من الخادم أكثر مفهومًا من كود الحالة.

الطلب البطيء

تُرتّب المدخلات وفقًا لـ timings.wait (TTFB) بشكل تنازلي. القيم العالية للـ wait = الخادم بطيء. القيم العالية للـ timings.connect مع القيم الطبيعية للـ wait = القيود تقع في الشبكة أو عملية التشفير، وليس في تطبيقك. هذه الأشياء تشير إلى حلول مختلفة، لذا فإن التأكد من ذلك يوفر الكثير من الوقت من التهميش الخاطئ للطبقة.

الطلب المفقود

في بعض الأحيان، يكون السبب هو طلب مفقود — مُرسلة ويب لا تُرسل، طلب مسبق OPTIONS يُمنع من قبل CORS، أو طلب تحليلات يُأكل من قبل مُحظر الإعلانات. مقارنة ما يجب أن يكون في ملف HAR مع ما هو موجود. غياب الطلب هو بيانات.

المشكلة الخاصة بالخصوصية التي يجب أن تعرفها

يحتوي ملف HAR على كل شيء. وهذا يشمل:

  • Authorization العناوين — وثائق التحقق من الهوية، بيانات التحقق من الحساب الأساسي
  • Cookie العناوين — وثائق الجلسة، JWTs، أي شيء في ملف الـ Cookie
  • محتوى الطلبات والردود — والتي قد تحتوي على كلمات مرور، بيانات شخصية، أو مفاتيح واجهة برمجة التطبيقات

لا يُحذف أي من هذه في Chrome عند التصدير. قبل مشاركة ملف HAR مع الدعم، أو المورِّد، أو زميل خارج شركتك، احذف أو قم بتعديل الحقول الحساسة.

أسرع طريقة لفحص وتنظيف ملف HAR قبل مشاركته هي مُعدّل ملف HAR — ضع ملفك فيه، انتقل عبر المدخلات، وقم بتعديلها قبل إرسالها. بديلًا، إذا كنت مرتاحًا لـ jq:

# Strip Authorization headers from all entries
jq '.log.entries[].request.headers |= map(select(.name | ascii_downcase != "authorization"))' file.har

ليس أجمل مثال من خطوة واحدة، لكنه يعمل.

قراءة ملف HAR الخام

يُعتبر ملف HAR ملف JSON، وبالتالي يمكن قراءته في أي محرر نصي. في الممارسة، يكون كبيرًا جدًا — يُنتج تحميل صفحة عادية ملفًا بحجم مئات كيلو بايت من العناوين والجسوم، كلها مُوزعة على مفاتيح متداخلة. بعض الطرق لتنقله:

  • استيراده إلى أدوات التطور — يدعم Chrome و Firefox استيراد ملفات HAR إلى تبويب الشبكة من خلال أيقونة المفتاح. هذا يعطيك نفس واجهة التصفّح والترتيب مثل التقاط مباشر.
  • مُعدّل ملف HAR — مبني على المتصفح، لا يتطلب تثبيت. مفيد عندما تُرسل الملف إلى شخص لا يستخدم أدوات التطور.
  • jq — لتصفية من خلال سطر الأوامر. jq '.log.entries[] | select(.response.status >= 400) | {url: .request.url, status: .response.status}' يُستخرج كل الطلبات المُفشّلة مع روابطها في الثانية.

لتحليل سريع وتصفية، jq أسرع. لمشاركة وفحص بصري، الاستيراد عبر المتصفح أو استخدام مُعدّل عبر الإنترنت يعني أن الشخص الآخر لا يحتاج إلى معرفة ما هو jq هو.

هل تريد حذف الإعلانات؟ تخلص من الإعلانات اليوم

تثبيت ملحقاتنا

أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع

أضف لـ إضافة كروم أضف لـ امتداد الحافة أضف لـ إضافة فايرفوكس أضف لـ ملحق الأوبرا

وصلت لوحة النتائج!

لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!

إعلان · حذف؟
إعلان · حذف؟
إعلان · حذف؟

ركن الأخبار مع أبرز التقنيات

شارك

ساعدنا على الاستمرار في تقديم أدوات مجانية قيمة

اشتري لي قهوة
إعلان · حذف؟