group-telegram.com/Analyst_Boost/113
Create:
Last Update:
Last Update:
🗺 Вебушка без адреса: как устроен URI 🗺
✏️ Участвую в конкурсе «Продолжи мысль» от @systems_education.
И на собесах, и в работе приходится синтезировать адреса для вызовов по HTTP. Я видал всякой дичи, поэтому решил разобраться, что же на самом деле говорят RFC — первоисточники от в т. ч. Роя Филдинга (автора REST) и Тима Бернерса-Ли (автора всея тыртырнета):
• RFC 3986 — Синтаксис URI
• RFC 7230 §2.7 — URI в HTTP-запросах
• RFC 9110 §4.1 — Семантика HTTP
👆 Схему привёл на картинке выше (в любимом PlantUML). Разберём её по примеру:
https://[email protected]:8080/shops/orders?order_id=58719&urgent=true#confirmation
• scheme —
https, ftp, mailto, tel
... Обязательный протокол. Следите за тем, чтобы у вас не было http без S-как-доллар.• // + authority — блок, содержащий:
• Логин —
kharichkin@
. Редкость, да и логин:пароль в URI — это ад, не делайте так• Хост —
kabanych.ru
. Обязателен, это и есть "бренд" ресурса)• Порт —
:8080
. Обычно опускают на проде. Актуальнее для тестовых стендов.• path —
/shops/orders
— обязательный путь к ресурсу. Главная страница — это обычно просто хотя бы "/
".• ?query —
?order_id=...
— опциональные параметры. Можно много, но не стоит. Если вложенные и перс. данные — передавайте в теле.•
#
fragment — #confirmation
— якорь. Не уходит на сервер, работает только на клиенте. Пример:https://en.wikipedia.org/wiki/Fallout_(video_game)#Story
📬 Как это выглядит в HTTP-запросах
GET /inbox/messages?id=4321 HTTP/1.1
Host: kabanych.ru:8080
👉 Относительный URI + заголовок Host
GET http://kabanych.ru:8080/api/profile?user=kharichkin HTTP/1.1
👉 Абсолютный URI, чаще используется в прокси, middleware и кешах. Напоминаю не передавать перс. данные в строке. Даже в https при шифрованной передаче с SSL/TLS, они попадут как минимум в историю браузера, что небезопасно.
🧠 На десерт
— Длина строки (не) бесконечна. Вики до сих пор пишет про 2к символов, но это ссылка на ныне мёртвый IE. RFC на это всё равно, это ограничение из мира самих браузеров. Хром мне так и не удалось сломать гигантской URL'ой, например.
— В URI (без хитростей с доменами .рф) базово нельзя кириллицу, пробелы, &, #, ? и пр.
Нужно URL-кодирование. Вот почему ссылки из Wiki обычно такие громоздкие, например:
ü → %C3%BC, пробел → %20.
https://ru.wikipedia.org/wiki/Rasterschl%C3%BCssel_44
#продолжи_мысль_SE | Analyst Boost
BY Analyst Boost. Никита Харичкин

Share with your friend now:
group-telegram.com/Analyst_Boost/113