§

URL

§

اجزای URL

URL کامل (href)
پروتکل
نام کاربری
رمز عبور
Host
نام میزبان
درگاه
مسیر
Search (خام)
هش (قطعه)
مبدأ
§

پارامترهای Query

کلید مقدار (خام) مقدار رمزگشایی‌شده

هیچ پارامتر query در این URL وجود ندارد

توسعه‌دهندگان ایرانی هنگام کار با API های داخلی و خارجی، تجزیه URL را مرتباً نیاز دارند: بررسی پارامترهای query قبل از ارسال درخواست با curl یا Postman، رمزگشایی لینک‌های ارجاعی سیستم‌های پرداخت مثل زرین‌پال که token های امنیتی در query string حمل می‌کنند، و تأیید صحت URL های redirect در سیستم‌های احراز هویت مثل Keycloak که برای پروژه‌های دولتی ایران پیاده می‌شوند. این تجزیه‌گر مبتنی بر مرورگر از استاندارد WHATWG URL بومی استفاده می‌کند — همان الگوریتمی که Node.js و مرورگرها برای تجزیه URL استفاده می‌کنند.

تجزیه URL چگونه کار می‌کند

تجزیه‌گر روی استاندارد WHATWG URL اجرا می‌شود، همان الگوریتمی که مرورگر برای هر href استفاده می‌کند. رشته را به سازنده URL بومی می‌دهیم و هر جزء را به عنوان یک property بازمی‌خوانیم.

  1. اعتبارسنجی ورودی. یک رشته خالی اعلان ورودی خالی نشان می‌دهد. در غیر این صورت متن را به new URL(text) ارسال می‌کنیم؛ یک TypeError به این معناست که رشته یک URL مطلق معتبر نیست.
  2. خواندن اجزای ساختاری. protocol، username، password، host، hostname، port، pathname، search، hash و origin را از شی URL می‌خوانیم. هر کدام در ردیف مستقل خود قرار می‌گیرند تا بتوانید آن را به تنهایی کپی کنید.
  3. پیمایش query string. url.searchParams.entries() را پیموده و برای هر کلید یک ردیف جدول رندر می‌کنیم. مقدار خام در کنار decodeURIComponent(value) قرار می‌گیرد تا بارهای percent-encoded (فاصله‌ها، علامت plus، Unicode) به متن ساده خوانده شوند.
  4. بازسازی در صورت تقاضا. هر سلول را ویرایش کنید، یک ردیف حذف کنید یا پارامتر جدیدی اضافه کنید، سپس Build URL را کلیک کنید. ابزار یک شی URL جدید از ویرایش‌های شما بازسازی کرده و نتیجه را به جعبه ورودی برمی‌گرداند.
  5. حالت زنده. حالت زنده را فعال کنید و هر ضربه کلید URL را با debounce 150 میلی‌ثانیه دوباره تجزیه می‌کند. وقتی قطعاتی از یک لاگ پیست می‌کنید و می‌خواهید بازخورد فوری داشته باشید مفید است.

چرا URL را در مرورگر تجزیه کنیم

  • هیچ‌چیز از تب خارج نمی‌شود. URL ها حاوی توکن‌ها، شناسه‌های session، حالت OAuth و پارامترهای query امضاشده هستند که نمی‌خواهید یک سرویس شخص ثالث آن‌ها را نگه دارد. این تجزیه‌گر از همان الگوریتم URL که مرورگر شما از قبل به صورت محلی اجرا می‌کند استفاده می‌کند — بدون آپلود، بدون فراخوانی شبکه.
  • با آنچه کد شما می‌بیند مطابقت دارد. Node.js، Deno، مرورگرهای مدرن و Cloudflare Workers همگی پیاده‌سازی WHATWG URL را دارند. بررسی یک URL اینجا همان تقسیم‌بندی اجزا را که یک فراخوانی new URL(input) در production به شما می‌دهد ارائه می‌دهد.
  • query string ها را به روشی که انسان‌ها می‌فهمند می‌خواند. مقادیر خام و رمزگشایی‌شده کنار هم قرار می‌گیرند، بنابراین یک جفت q=hello%20world هر دو بایت‌های سیم و hello world قابل‌خواندن را در یک نگاه نمایش می‌دهد. نیازی به رمزگشایی ذهنی URL نیست.
  • ویرایش رفت و برگشتی. یک پارامتر tracking حذف کنید، یک اشتباه تایپی در path برطرف کنید، یک port تغییر دهید — و URL را بازسازی کنید. خروجی از طریق سازنده URL برمی‌گردد تا هر چیز نامعتبری قبل از کپی کردن نمایان شود.

کاربردهای رایج

تجزیه URL در کار روزانه توسعه‌دهنده، امنیت و تحلیل هر زمانی که URL بیش از یک لینک ساده است نمود پیدا می‌کند.

  • اشکال‌زدایی endpoints API: یک URL پایه، path و پارامترهای query را قبل از ارسال یک درخواست curl یا Postman تأیید کنید.
  • ممیزی پارامترهای tracking: هر UTM، gclid، fbclid یا کلید campaign روی یک URL صفحه فرود را فهرست کرده و تصمیم بگیرید کدام را نگه دارید.
  • اعتبارسنجی لینک‌های وابسته و شریک: یک deeplink پیست کنید، host مقصد و هدف redirect تعبیه‌شده را قبل از انتشار تأیید کنید.

یک نمونه عملی

کوئری https://example.com/search?q=hello%20world&lang=en را در ورودی پیست کنید. پروتکل https: نشان می‌دهد، hostname example.com نشان می‌دهد، pathname /search نشان می‌دهد، و search ?q=hello%20world&lang=en نشان می‌دهد. جدول query دو ردیف نشان می‌دهد: q با مقدار خام hello%20world و مقدار رمزگشایی‌شده hello world، سپس lang با هر دو مقدار خام و رمزگشایی‌شده en. روی Remove در ردیف lang کلیک کنید، سپس Build URL — ورودی به https://example.com/search?q=hello%20world به‌روزرسانی می‌شود.

FAQ

تجزیه‌گر URL چیست؟

یک تجزیه‌گر URL یک رشته URL را دریافت کرده و آن را به اجزای نام‌گذاری‌شده تجزیه می‌کند: پروتکل (https)، userinfo (نام کاربری، رمز عبور)، host (hostname به علاوه port اختیاری)، path، query string و fragment. همچنین هر پارامتر query را رمزگشایی می‌کند تا مقادیر percent-encoded (مثل %20 برای فاصله) خوانا باشند. تجزیه‌گر اینجا از استاندارد WHATWG URL استفاده می‌کند، همانی که مرورگر شما برای بارگذاری صفحه استفاده می‌کند.

تفاوت بین host و hostname چیست؟

Hostname فقط دامنه (یا آدرس IP) است — برای example.com:8080 hostname برابر example.com است. Host برابر hostname به علاوه port وقتی یک port غیرپیش‌فرض حضور دارد است، بنابراین همان URL host برابر example.com:8080 دارد. برای URL هایی روی port های پیش‌فرض (443 برای https، 80 برای http) host و hostname یکسان هستند.

آیا رمزگشایی به طور خودکار انجام می‌شود؟

اجزای ساختاری (پروتکل، hostname، port، pathname) مستقیماً از شی URL بدون رمزگشایی اضافه خوانده می‌شوند — سازنده URL از قبل آن‌ها را نرمال می‌کند. مقادیر query دو بار نشان داده می‌شوند: رشته percent-encoded خام همان‌طور که در search ظاهر می‌شود، و مقدار رمزگشایی‌شده تولیدشده توسط decodeURIComponent. به این ترتیب می‌توانید هر فرمی که ابزار downstream شما انتظار دارد را کپی کنید.

آیا می‌توانم URL را ویرایش و بازسازی کنم؟

بله. هر سلول اجزا و هر سلول پارامتر query قابل ویرایش است. ردیف‌های query را با دکمه‌های Add و Remove اضافه یا حذف کنید، سپس Build URL from parts را کلیک کنید. ابزار ویرایش‌های شما را از طریق سازنده URL اجرا کرده و نتیجه را در ورودی می‌نویسد — اگر ویرایش‌ها URL نامعتبری تولید کنند همان پیام خطایی که از new URL() در کد خودتان دریافت می‌کنید نمایش داده می‌شود.

تجزیه URL یکی از آن کارهای کوچک است که هر توسعه‌دهنده وب هر هفته انجام می‌دهد. انجام آن در مرورگر، با همان الگوریتمی که کد production استفاده می‌کند، کار را سریع و داده را روی دستگاه شما نگه می‌دارد.