ترويسة Content-Language: ar لا تجبر المتصفح على تغيير أي شيء بمفردها — إنها مجرد تلميح لمحركات البحث وأدوات إمكانية الوصول حول لغة المحتوى. الأهم عمليًا هو التأكد من أن Content-Type يتضمن charset=utf-8 بوضوح؛ فبدون ترميز صريح، قد تُعرَض الأحرف العربية كرموز غير مفهومة في بعض الأدوات القديمة أو الزواحف (crawlers) التي تفترض ترميزًا افتراضيًا خاطئًا.
ترويسات الطلب مقابل ترويسات الاستجابة
يُرسِل المتصفح ترويسات الطلب (مثل Accept وUser-Agent وCookie) إلى الخادم، واصفًا نفسه وتوقعاته. يُرسِل الخادم ترويسات الاستجابة (Content-Type وSet-Cookie وCache-Control) في المقابل، واصفًا البيانات المُعادة وتعليمات للمتصفح.
لماذا تلزم Content-Type
تخبر ترويسة Content-Type المتصفح كيف يفسّر جسم الاستجابة: كصفحة HTML، أو بيانات JSON، أو صورة، أو ملف للتنزيل. دون القيمة الصحيحة هنا، قد يحاول المتصفح عرض JSON كنص عادي، أو العكس، معالجة HTML بشكل خاطئ.
كيف تتحكم Cache-Control في التخزين المؤقت
قيم مثل max-age=3600 أو no-cache تخبر المتصفح والخوادم الوسيطة إلى متى يمكن استخدام نسخة مخزّنة مؤقتًا من مورد دون طلب جديد من الخادم. سوء ضبط هذه الترويسة سبب شائع لرؤية المستخدمين نسخة قديمة من موقع.
لماذا نحتاج هذا
- تشخيص سبب عرض المتصفح استجابة API بشكل خاطئ.
- التحقق من أن ترميز الصفحة (
charset=utf-8) مضبوط بشكل صحيح لعرض النصوص العربية دون تشويه. - التأكد من أن الموقع يُقدَّم عبر HTTPS — شرط إلزامي لعمل Web Crypto API التي تعتمد عليها أدوات التجزئة (hash) وJWT في هذا الموقع نفسه.
لماذا تتكرر بعض الترويسات أحيانًا
يسمح HTTP بظهور الترويسة نفسها عدة مرات في استجابة واحدة — أكثر الأمثلة شيوعًا عدة أسطر Set-Cookie، سطر لكل ملف تعريف ارتباط يُضبَط. معظم الترويسات المكررة الأخرى يمكن دمجها في قيمة واحدة مفصولة بفواصل دون تغيير معناها، لكن Set-Cookie استثناء مقصود، لأن الفاصلة قد تكون جزءًا شرعيًا من قيمة ملف تعريف الارتباط.