محلل URL

حلل أي عنوان URL إلى البروتوكول والمضيف والمنفذ والمسار والاستعلام والجزء باستخدام معيار WHATWG URL. يتم فك ترميز معلمات الاستعلام في جدول قابل للقراءة.

قسّم عنوان URL إلى كل مكوّن يراه المتصفح. الصق عنوان URL وسيتم استخراج كل جزء باستخدام نفس محلل WHATWG الذي يستخدمه متصفحك، لذا تطابق النتيجة تمامًا الطريقة التي سيُفسَّر بها عنوان URL فعليًا. يتم فك ترميز معلمات الاستعلام في جدول.

معلمات الاستعلام

تشريح عنوان URL

شكل عنوان URL

يتبع كل عنوان URL مطلق نفس الهيكل الأساسي:

scheme://user:password@host:port/path?query#fragment

تستخدم معظم عناوين URL عددًا قليلًا فقط من تلك الفتحات، لكن القواعد النحوية تسمح دائمًا بكل منها. قراءة عنوان URL هي إلى حد كبير معرفة أين يتوقف مكوّن ويبدأ التالي، وهو ما تحدده الفواصل :// و@ و: و/ و? و#.

مكوّن بعد مكوّن

البروتوكول (المخطط) يحدد كيفية جلب المورد — https: وmailto: وftp:. لاحظ أن محلل WHATWG يتضمن النقطتين الختاميتين في هذه القيمة، وهو ما يفاجئ من يقارنها بالسلسلة "https".

اسم المستخدم وكلمة المرور هما قسم معلومات المستخدم المهجور. ما تزال المتصفحات تحللهما لكنها تزيلهما من الطلبات وغالبًا ما تحذر، لأن تضمين بيانات الاعتماد في عنوان URL يسرّبها إلى السجل وسجلات الخادم وترويسات المُحيل. تعامل مع وجودهما في عنوان URL لم تكتبه كمؤشر تصيد.

اسم المضيف هو النطاق أو عنوان IP وحده. المضيف هو اسم المضيف زائد المنفذ عند وجود منفذ غير افتراضي، ولهذا يبدو الحقلان هنا غالبًا متطابقين.

المنفذ فارغ عندما يستخدم عنوان URL منفذ المخطط الافتراضي — 443 لـ https و80 لـ http. يطبّع المحلل هذا: example.com:443/ يبلغ عن منفذ فارغ لأن 443 لا يضيف أي معلومات.

المسار هو كل شيء من أول / حتى الاستعلام. وهو المكوّن الوحيد الذي لا يكون فارغًا أبدًا لعنوان URL من نوع http(s)؛ فالأصل المجرد يحصل على مسار /.

سلسلة الاستعلام تبدأ عند ? وتحمل المعلمات. الجزء يبدأ عند # وهو الجزء الوحيد الذي لا يُرسل إلى الخادم أبدًا — يُعالَج بالكامل في جانب العميل، ولهذا استخدمته تطبيقات الصفحة الواحدة في التوجيه، ولهذا يبقى رمز الوصول في الجزء خارج سجلات الخادم.

الأصل هو الثلاثي ذو الصلة بالأمان: المخطط والمضيف والمنفذ. يتشارك عنوانا URL في الأصل فقط عندما تتطابق الثلاثة جميعًا، وهذا هو بالضبط ما تستند إليه سياسة نفس الأصل وقراءات CORS.

لماذا المحلل صارم

يقبل محلل WHATWG عناوين URL المطلقة فقط. example.com/page لا تحتوي على مخطط، لذا لا يمكن تحليلها وحدها — لا يملك المحلل طريقة لمعرفة ما إذا كنت تقصد example.com/page أم مسارًا نسبيًا. يحل الكود الحقيقي المراجع النسبية مقابل عنوان URL أساسي؛ تتطلب هذه الأداة عمدًا الصيغة المطلقة بحيث يكون ما تراه غير غامض.

تطبيع ستلاحظه

لا يعيد المحلل السلسلة الخام. يحوّل المخطط والمضيف إلى أحرف صغيرة، ويحل مقاطع . و.. في المسار، ويحذف المنافذ الافتراضية، ويحوّل أسماء النطاقات الدولية إلى صيغة Punycode، لذا يبلغ münchen.de عن اسم مضيف xn--mnchen-3ya.de. هذه ميزة: تُظهر لك عنوان URL كما سيعامله مكدس الشبكة فعلًا، لا كما كُتب.

المعلمات المتكررة

قد تكرر سلسلة الاستعلام مفتاحًا بشكل مشروع، كما في ?tag=a&tag=b. لا توجد مواصفة تحدد ما يعنيه ذلك — بعض الأطر تأخذ القيمة الأولى، وبعضها الأخيرة، وبعضها يجمع مصفوفة. يسرد الجدول هنا كل تكرار بالترتيب بحيث ترى بالضبط ما أُرسل بدلاً من عرض مختزل.

إشعار مفتوح المصدر: منفذ باستخدام واجهتي URL وURLSearchParams من WHATWG المدمجتين في المتصفح. لا تُستخدم أي مكتبة خارجية.

الأسئلة الشائعة

لماذا حقل المنفذ فارغ؟
لأن عنوان URL يستخدم المنفذ الافتراضي لمخططه. يحذف محلل WHATWG 443 لـ https و80 لـ http، إذ أن تضمينهما لا يضيف معلومات وقد يكسر مقارنات الأصل.
لماذا يتضمن البروتوكول نقطتين؟
هذا ما يحدده معيار URL. خاصية البروتوكول هي 'https:' وليست 'https'. إذا قارنت اسم مخطط مجردًا، تذكر أن تحسب النقطتين الختاميتين.
ما الفرق بين المضيف واسم المضيف؟
اسم المضيف هو النطاق وحده. المضيف يتضمن المنفذ إذا كان موجودًا. بالنسبة لـ https://example.com:8443/ فإن اسم المضيف هو example.com والمضيف هو example.com:8443.
لماذا لا أستطيع تحليل عنوان URL نسبي؟
المرجع النسبي مثل /about أو ../img.png له معنى فقط مقابل عنوان URL أساسي. يتطلب المحلل عنوان URL مطلقًا بمخطط حتى تكون النتيجة غير غامضة.
هل يُرسل الجزء إلى الخادم؟
لا. الجزء بعد # لا يُنقل أبدًا في طلب HTTP. يُعالَج بالكامل في المتصفح، ولهذا استخدمته تدفقات OAuth الضمنية لإبقاء الرموز خارج سجلات الخادم.
لماذا تغير نطاقي الموحّد؟
تُحوَّل أسماء النطاقات الدولية إلى Punycode، وهي الصيغة ASCII التي يستخدمها DNS فعليًا. münchen.de تصبح xn--mnchen-3ya.de. هذا هو نفس التحويل الذي يجريه متصفحك قبل إرسال الطلب.