Інструменти розробника · URL енкодер & декодер
WHATWG URL Стандарт проти RFC 3986: чому браузери та бібліотеки незгодні
· Підземелля
Опубліковано ToolAcre · Редакція журналу
виворітна обробка стандарти розробник-tools

Є два життєві визначення URLі вони не згодні з метою. Цей пост пояснює, чому WHATWG написав свій власний стандарт, де два відрізняються кодуванням і парсингом, і який один код слідує.
Мистецтво URL що сувора бібліотека відхиляє і браузер неналежний завантаження — один рядок, два вироки
А рядок з застібкою в JavaScript якщо ви хочете змінити свій браузер, то в якому є частина URL шлях. Цей самий рядок досягає резервної копії бібліотеки Python, і він відмовляється від його парі, оскільки не допускається засмаги. Молода URL, два різні результати. Не неправильно — вони дотримуються різних стандартів. Мистецтво WHATWG стандарт описує, які браузери насправді роблять з URL-адресами реального світу, включаючи, як вони керують неправильним введенням. RFC 3986 визначає формальну граматику, яка URL має бути ідеально відповідати. Багато бібліотек задньої частини, побудованих на RFC 3986 використовуйте, що граматика строго і відхиляється від неї.
Цей дивергентство має значення при переході даних між навколишніми середовищами. А.А URL перевірити, що ввімкнути, не вдається вводити в інструмент. Розуміння якого коду дозволяє уникнути проблем, які можуть бути використані для усунення непоганих помилок.
Чому WHATWG почався — описуючи, що веб-переглядачі дійсно роблять з нерозголошенням, а не те, що діє
Мистецтво WHATWG Робоча група, утворена в 2004 щоб стандартизувати, як веб-переглядачі дійсно керують URL-адресами на практиці, а не визначаючи суворих формальних правил, які браузери не слідувати. RFC 2396 описати формальну граматику, але браузери на практиці не слідувати за ним точно. У світі браузери розроблені практичні правила для перемішування просторів, обробки втечу символи та відновлення з неформованого введення, що RFC не чекав або чекав.
RFC 3986 прибули 2005 з формальною граматикою для добре сформованих URL-адрес та суворих вимог. Браузери WHATWG; бібліотеки задні часто реалізуються RFC 3986.
Код наборів versus зарезервованих символів — як URL Стандартні списки, що стосуються RFC 3986's категорії
RFC 3986 розділяє символи на три категорії: замкнені, незбережені, і все інше, що необхідно закодувати. Зашифровані символи, такі як колонка, в'язка, знак питання і хеш, мають структурне значення у URL. Незабезпечені символи є літерами, цифрами, феном, низовим, періодом і тентом; вони завжди безпечні. Все інше отримує проценти в якості байтів. Стандарт забезпечує одне чітке правило: знаю, яку категорію належить вашому персонажу.
Мистецтво WHATWG URL Стандарт приймає компонентний підхід. Визначає різні правила кодування для схеми, органу, шляху, запиту та фрагмента окремо замість використання глобальних категорій. Ампсанд може бути зашифрований в шляху, але залишений окремо в рядку запиту. Простота, але точне уявлення залежить від контексту. Цей дизайн відповідає поведінці браузера набагато краще, але вимагає знати, яку частину частини URL ви кодування.
Допуск поломки: пробіли, застібки та вкладки — вводи один стандартний відторгнення та інші ремонти
Простір повинен стати %20 за стандартами, але браузери мовчно перетворюють літрові проміжки. Забороняється як за стандартами, але деякі браузери лікують їх як стебло. Забороняється заборона розміщення вкладок, нових ліній та контрольних символів. WHATWG specifies lenient parser поведінка: конвертувати або ігнорувати їх.
Не-ASCII символи, як é або nd s повинні бути відсотково зашифровані за допомогою UTF-8 кодування. RFC 3986 не вірно вказав, що сам шаблон кодування символів, він приймає байти, але не говорить, як отримати їх з тексту. Мистецтво WHATWG стандартно явно вимагає UTF-8: перетворювати рядок в UTF-8 байти спочатку, потім відсотків-кодити їх. Обидва стандарти досягають результату, але вони починаються від різних базових припущеннях і не виявляються про те, що вони не мають жодних труднощів.
Ведуться роботи: заправка URL з задньою віссю і простором в обох моделях — вихідні у порівнянні
Візьміть рядок прикладу "https://example.com/café\ пошук. У браузері з’являються задня, і бачить її як символ шляху; він бачить простір і зашифрує його на %20, що виробляє щось схоже https://example.com/café%5C%20search. Анонім RFC 3986 parser відхиляє весь URL не можна забувати, що заборонені задніми в'язками і пробілами. У браузері повністю завершуються парсерські роботи. Спробуйте ще один приклад: "https://[email protected]:80/path?q=a&b=c". Як правило, виявляються у користуванні, ведучий, порт, шлях і кварка чітко. Вони згодні повністю на цій структурі URL. Незгода відбувається тільки на незвичних або нерозголошеннях.
Відкрити URL енкодер & декодер RFC 3986 режим з поведінкою браузера. Вставте рядок з пробілами, застібками або іншими крайовими випадками. Інструмент показує, як кожен стандарт перетворює однаковий вхід по-різному. Ви побачите відразу, що один строгий і який кожен робить.
Який ваш оточення використовує — браузери та шумопади URL Стандартні бібліотеки сервера за допомогою багатьох бібліотек RFC, описаний в цілому
У браузерах, JavaScript використовувати WHATWG URL Стандарт за замовчуванням. Мистецтво URL API втілює його точно. Node.js також використовується WHATWG. Бібліотека Python, як правило, для реалізації RFC 3986; urllib слідувати за ним. Java бібліотеки різняться; java.net.URL дорогі RFC 3986. Руська виворітна крита наступним чином WHATWG. Прямокутна сітка/url впливає на WHATWG. Це загальний візерунок, не абсолютне правило.
Якщо ви будуєте URL-адреси, вони переходять між браузером і задньою стороною, забирають один стандарт і приклеїти до нього. Використовуйте браузер URL API для WHATWGЯкщо бібліотека задньої частини є строгим, це не суперечка, але вибір дизайну.
Що це не кришка — хостільна парасинга, IPv6 літрів і IDNA переробка
Розміщений пароізоляція передбачає IDNA, punycode і правила реєстратора, які виходять за межі URL повністю занурення. IPv6 адреси, спеціальні схеми, такі як mailto: або дані:, і порожні компоненти є окремими темами, відмінними від відсотків-повчання повністю. Обмеження довжини доменів та дії хостового імені в залежності від реєстратора та не відповідають даним обговоренням. Також виключено: відносні посилання та схеми специфічні правила оформлення. Ця публікація фокусується тільки на кодуванні та відмінностях парсингу.
Ця дискусія присвячена різним кодуванню та відмінності парсингу, що відрізняє ці стандарти. Виключаючи правила хостового імені, DNS правила та схема-специфічна поведінка запобігає згубленню про правила, що проценти.
Поруч: те ж саме URL в одному світі і похибка в іншому — як працює URL енкодер & декодер дає вам звичайну RFC 3986 кодування, щоб побачити, що браузер нормалізований
Те ж URL рядок може бути дійсним під одним стандартом і недійсним під іншим. Як правильно підходять для власних цілей дизайну. При кодуванні URL компоненти программатично, використовують правильний інструмент для вашого середовища. WHATWG описувати те, що насправді веб-переглядачі; RFC 3986 визначає формальну граматику. Мистецтво URL енкодер & декодер показує RFC 3986 ви можете переглянути певні відмінності і вибрати, які підходять для вашої ситуації.
Найчастіше виникають випадки перехресного браузера-на-закінчення. Розуміння цієї різниці означає, що переїзд навмисно не випадково або помилково.