SmartKitio

الويب

ممّ تتكوّن الروابط (URL)

الرابط (URL) تعليمات مدمجة لجلب مورد أو تحديد موقعه: أي بروتوكول، أي خادم، أي مسار، وأي معاملات. المحلّلات تعامل بعض الأحرف كبنية؛ البيانات التي تحتويها يجب ترميزها وإلا ينكسر الرابط. فهم كل جزء يساعد على تصحيح التوجيه ومفاتيح الذاكرة المؤقتة والتحليلات وإعادات التوجيه المفتوحة قبل أن تصبح حوادث.

6 دقائق قراءة · آخر تحديث 2026-10-04

صورة شبكة واتصال تُوحي بعناوين الويب والتوجيه
صورة عبر Unsplash · رخصة Unsplash

URI وURL وURN

URI (Uniform Resource Identifier) المصطلح الشامل. URL (Uniform Resource Locator) يصف كيفية الوصول إلى مورد — https://example.com/page رابط URL. URN يسمّي مورداً بلا موقع (urn:isbn:978-…). في تطوير الويب اليومي يُستخدمان «URL» و«URI» غالباً بالتبادل لعناوين http(s)، لكن المواصفات تميّز بين الاسم والموقع. يجب أن تخزّن API والسجلات روابط canonical بترميز متسق.

مثال مشروح

أجزاء الرابط في لمحة

https://www.example.com:443/products/item?id=42&color=blue%20green#reviews

Full URL: https://www.example.com:443/products/item?id=42&color=blue%20green#reviews

  1. 01 · المخطط

    https://

    البروتوكول مع فاصل السلطة؛ https يعني TLS والمنفذ الافتراضي 443 عند حذفه.

  2. 02 · النطاق الفرعي

    www.

    تسميات المضيف يسار النطاق القابل للتسجيل؛ ما زالت جزءاً من السلطة في ترويسة Host.

  3. 03 · المضيف

    example.com

    اسم DNS أو IP يحلّه العميل قبل فتح الاتصال.

  4. 04 · المنفذ

    :443

    اختياري؛ مذكور هنا للتعليم — المتصفحات غالباً تخفي منفذ https الافتراضي في شريط العنوان.

  5. 05 · المسار

    /products/item

    مسار هرمي للمورد على الخادم؛ يظهر في سطر طلب HTTP (مع الاستعلام).

  6. 06 · الاستعلام

    ?id=42&color=blue%20green

    معاملات مفتاح–قيمة بعد ?؛ المسافات تُرمَّز %20 (أو + في بعض أجسام النماذج — ليس تبادلياً دائماً).

  7. 07 · الجزء

    #reviews

    مرساة جانب العميل فقط؛ لا تُرسل إلى الأصل في جلب مستند نموذجي.

ربط الأجزاء الملوّنة يعيد الرابط كاملاً. userinfo (user:pass@) محذوف هنا — المتصفحات الحديثة تقلّل بروزه في روابط التصفح.

دور كل جزء في HTTP

المكوّنيُرسل إلى الأصل؟فخ شائع
المخططبشكل غير مباشر (TLS مقابل cleartext)موارد http على صفحات https
السلطة (مضيف + منفذ)ترويسة Host (+ منفذ إن لم يكن افتراضياً)base URL خاطئ في SPA وروابط البريد
المسار + الاستعلامسطر الطلب? مزدوج حين لا يُرمَّز رابط متداخل بـ encodeURIComponent
الجزءلاتوقع أن #section يصل لتوجيه جانب الخادم
ما يرسله المتصفح مقابل ما يبقى محلياً
  1. تحليل الرابط كاملاً

    فصل المخطط والسلطة والمسار والاستعلام والجزء

  2. سطر طلب HTTP

    Method + path + query + إصدار HTTP

  3. ترويسة Host

    مضيف السلطة (والمنفذ إن لم يكن افتراضياً)

  4. إسقاط الجزء

    #syntax لا يغادر المتصفح لجلب الشبكة

  5. تمرير العرض

    بعد الاستجابة، القفز إلى id=syntax إن وُجد في HTML

الأجزاء تمكّن مراسي داخل الصفحة دون رحلات إلى الخادم.

المخطط والمنافذ الافتراضية

مخططات شائعة

المخططالمنفذ الافتراضياستخدام نموذجي
http80HTTP صريح (legacy؛ إعادة توجيه إلى https على المواقع الحديثة)
https443HTTP عبر TLS — الافتراضي لتطبيقات الويب
ws / wss80 / 443WebSockets؛ wss مغلّف بـ TLS
mailto—يفتح عميل بريد مع معاملات العنوان
file—وصول ملف محلي؛ قواعد sandbox خاصة في المتصفحات

حذف المنفذ يعني «استخدم الافتراضي لهذا المخطط». :8080 صريح يلغي الافتراض عندما تستمع خوادم التطوير على منفذ غير قياسي.

المسار والاستعلام وفخاخ التحليل

أجزاء المسار مفصولة بـ /. الشرطة النهائية قد تهم الذاكرة المؤقتة والمضيفات الثابتة — اختر شكلاً canonical واحداً. سلاسل الاستعلام تبدأ بـ ? وتستخدم & بين الأزواج؛ المفاتيح والقيم بـ =. ?key= فارغ يرسل key بقيمة فارغة؛ ?key وحده قد يُعامل بشكل مختلف حسب الأُطر. مفاتيح مكررة (?tag=a&tag=b) صالحة؛ كود الخادم يقرّر الأول أو الأخير أو الجمع.

الروابط النسبية تُحلّ مقابل base (RFC 3986). رابط href="guides/foo" على https://example.com/docs/ يصبح https://example.com/docs/guides/foo — تظهر أخطاء حين يكون base خاطئاً في البريد أو SPA.

ترميز النسبة (URL encoding)

أحرف محجوزة — مسافة و& و= و? و# و+ و/ وغيرها — لها أدوار بنيوية. حين تظهر داخل البيانات (مصطلحات بحث، أسماء ملفات)، رمّزها % متبوعاً برقمين hex. المسافة غالباً %20؛ + في سلاسل الاستعلام كان تاريخياً مسافة في application/x-www-form-urlencoded — لا تفترض تبادل + و%20 في كل طبقة.

javascript
const q = "rock & roll";
encodeURIComponent(q); // "rock%20%26%20roll"
// Use encodeURIComponent for query VALUES;
// encodeURI for full URLs without breaking structure.

أسماء نطاق دولية ومسارات

أسماء مضيف Unicode تظهر punycode (xn--…) في DNS. المسارات قد تحتوي Unicode UTF-8 مرمّزاً بالنسبة حين يسمح الخادم والإطار بـ IRI. التطبيع وهجمات homograph ( «a» سيريلية مقابل «a» لاتينية ) مخاوف أمنية — المتصفحات تطبّق same-origin على أشكال punycode.

الأصل وقواعد same-site

الأصل (origin) يجمع المخطط والمضيف والمنفذ. cookies وCORS وسياسات fetch تعتمد على الأصل — لا بادئة المسار فقط. صفحة على https://app.example.com/settings وAPI على https://api.example.com أصلان مختلفان حتى على نفس النطاق القابل للتسجيل؛ الاستيلاء على subdomain يكسر الافتراضات إن أُهمل DNS.

اعتبارات أمنية

الروابط تنقل وتهاجم. لأنها تظهر في شريط العنوان والبريد والتحليلات وسجلات الخادم، فروق تحليل صغيرة بين framework وCDN وWebView جوال تصبح ثغرات تفويض. عامل كل هدف إعادة توجيه وcallback URL وwebhook كإدخال غير موثوق حتى تحلّله بAPI واعٍ بالمواصفات وتقارن الأصل والمسار والشكل المرمّز مع allowlist.

  • Open redirects: تحقق من next= مقابل allowlist مسارات أو مضيفين.
  • روابط javascript: javascript:… في href قد ينفّذ سكربتاً؛ امنعها في روابط من المستخدمين.
  • Mixed content: صفحات https تحمّل موارد http تضعف ضمانات TLS.
  • بيانات حساسة في الاستعلام: الروابط تصل إلى السجلات وReferer والسجل — فضّل POST أو ترويسات للرموز.
  • ترميز طويل: %252F double-encoding يتجاوز مرشحات ساذجة — طبّع قبل فحوص التفويض.
  • تصيّد userinfo: https://evil.com@trusted.com/ قد يبدو trusted.com في الواجهة — المتصفحات الحديثة تقلّل بروز userinfo.

SSRF والمضيفات الداخلية

كود خادم يجلب URL من المستخدم (بطاقات معاينة، مستوردون، webhooks) قد يُخدَع لاستدعاء http://127.0.0.1 أو نقاط metadata أو عناوان RFC 1918 خاصة. امنع link-local وloopback بعد التحليل؛ لا تعتمد على contains string لـ localhost. same-origin policy تحمي المتصفحات؛ الخوادم ليس لديها ذلك افتراضياً.

معالجة معاملات آمنة مقابل خطرة

نمط أكثر أماناً

  1. 1

    تحليل بـ URL API

    new URL(input, base) في JS حديث

  2. 2

    Allowlist مضيف/مسار

    قارن الأصل بعد التطبيع

  3. 3

    ترميز البيانات الصادرة

    encodeURIComponent على القيم فقط

  4. 4

    تسجيل روابط مُنقّحة

    احذف الرموز ومعرّفات الجلسة من التحليلات

نمط خطر

  1. 1

    ربط نصوص

    بناء روابط بـ ? و & يدوياً

  2. 2

    مرشحات blacklist

    حظر سلاسل حرفية فقط

  3. 3

    فك ترميز مرتين بلا ضبط

    قبول ترميز overlong

  4. 4

    أسرار في الاستعلام

    مفاتيح API ظاهرة في تسريبات Referer

الحل النسبي في التطبيقات

تطبيقات الصفحة الواحدة وقوالب البريد تُرسل روابط نسبية. حل RFC 3986 يدمج مرجعاً نسبياً مع base URL: ../api/v1/users من https://example.com/app/dashboard/ يصبح https://example.com/app/api/v1/users عند تطبيع الأجزاء. وسوم base خاطئة في HTML أو basename للموجّه خاطئ ينتج 404 تبدو كأخطاء خادم لكنها أخطاء جبر URL في العميل.

javascript
const base = "https://example.com/app/page";
const rel = "../api/items?q=1";
console.log(new URL(rel, base).href);
// "https://example.com/app/api/items?q=1"

أدوات ومواصفات متوافقة

url-encoder وurl-decoder في SmartKitio يعملان في المتصفح لترميز مصطلحات البحث وnext= متداخلة وأجزاء مسار non-ASCII دون تخمين الأحرف المحجوزة. حين يرجع رابط malformed 404 أو 400، http-status-lookup يشرح الرمز بينما تقسّم الرابط بـ new URL() — المخطط والمضيف والمسار وsearchParams يجب فحصها على حدة لا كسلسلة واحدة معتمة.

قراءة إضافية

  1. WHATWG URL Standard
  2. RFC 3986 — Uniform Resource Identifier (URI): Generic Syntax
  3. MDN — URL
  4. MDN — encodeURIComponent()
  5. RFC 9110 — HTTP semantics (origin, routing context) — كيف تستهدف الطلبات موارد محددة بـ URL

مقالات ذات صلة