URI — internet yoki boshqa identifikatsiya tizimida resource’ni nomlash yoki unga murojaat qilish uchun ishlatiladigan belgilar ketma-ketligi. To‘liq nomi Uniform Resource Identifier. URL va URN URI tushunchasining keng tarqalgan ko‘rinishlari sifatida qaraladi.
URI resource qayerda joylashganini, qanday olinishi yoki faqat nomini ifodalashi mumkin. Aniq semantika scheme’ga bog‘liq.
Umumiy tuzilma
URI quyidagi qismlarga ega bo‘lishi mumkin:
scheme://authority/path?query#fragment
Misol:
https://uzbekdevs.uz/wiki/uri?lang=uz#tuzilma
Barcha scheme’lar har bir komponentdan foydalanmaydi.
Scheme
Scheme URI qanday identifikator yoki access modeliga tegishli ekanini bildiradi:
http;https;mailto;ftp;urn;data;file;- custom application scheme.
Scheme nomidan keyin : yoziladi.
// barcha scheme’da majburiy emas.
Authority
Authority ko‘pincha quyidagi qismlardan tashkil topadi:
userinfo@host:port
Web URLlarda userinfo kam qo‘llanadi va phishing chalkashligini yaratishi mumkin.
Host domain yoki IP bo‘lishi mumkin.
Port berilmasa scheme default portidan foydalaniladi.
Host
Host resource’ga xizmat qiluvchi network nomini bildiradi.
Misollar:
Internationalized domain browserda Unicode yoki Punycode ko‘rinishida ifodalanishi mumkin.
Path
Path resource ierarxiyasini yoki endpoint yo‘lini bildiradi:
/wiki/uri
Path segmentlari / bilan ajratiladi.
Server pathni decode, normalize va routing qoidalari bilan qayta ishlaydi.
.. va encoded separator security nuqtayi nazaridan muhim.
Query
Query ? belgisidan keyin keladi:
?lang=uz&page=2
Ko‘pincha key-value parameterlar ishlatiladi.
Lekin URI standardining umumiy darajasida query faqat belgilar ketma-ketligi; aniq format applicationga bog‘liq.
Fragment
Fragment # belgisidan keyin keladi:
#tuzilma
HTTP request yuborilganda fragment odatda serverga uzatilmaydi.
Browser document ichidagi element, client route yoki boshqa local state uchun foydalanadi.
URL
URL resource’ning joylashuvi va access usulini ifodalovchi URI turidir.
Masalan:
https://example.com/file
Scheme, host va path orqali resource qayerda hamda qanday olinishi ko‘rsatiladi.
URN
URN resource’ni joylashuvdan mustaqil, persistent nom bilan aniqlashga qaratilgan URI turidir.
Masalan, ISBNga oid namespace.
URNning o‘zi resource’ni networkdan qanday olishni majburiy ko‘rsatmaydi.
Absolute URI
Absolute URI scheme bilan boshlanadi:
https://example.com/a
U boshqa base URIga ehtiyoj sezmaydi.
Configuration va API’da external link uchun absolute URI ishlatilishi mumkin.
Relative reference
Relative reference scheme va hostni bermasligi mumkin:
../images/logo.svg
U base URIga nisbatan resolve qilinadi.
HTML document base URL, current location yoki <base> elementi natijaga ta’sir qiladi.
Percent-encoding
URI ichida reserved yoki ruxsat etilmagan byte %HH ko‘rinishida yoziladi:
%20
Bu space byte’ini ifodalashi mumkin.
Encoding character emas, UTF-8 kabi encodingdan olingan byte’lar asosida bajarilishi mumkin.
Reserved belgilar
Ayrim belgilar URI strukturasi uchun maxsus ma’noga ega:
: / ? # [ ] @ ! $ & ' ( ) * + , ; =
Ularni data sifatida ishlatish contextga mos percent-encoding talab qilishi mumkin.
Butun URI’ni bir xil function bilan encode qilish noto‘g‘ri natija berishi mumkin.
Normalization
Semantik jihatdan bir xil URI turli yozuvga ega bo‘lishi mumkin:
Cache, signature va security allowlist uchun canonicalization aniq belgilanadi.
Parsing
URI oddiy string concatenation yoki regex bilan to‘liq va xavfsiz parse qilinmaydi.
Standart parser:
ni ajratadi.
[email protected] kabi URI’da haqiqiy host attacker.tld bo‘lishi mumkin.
Base URI
Relative reference absolute URIga base yordamida aylantiriladi.
Masalan:
Base: https://example.com/docs/page
Ref: ../img/logo.png
Natija path resolution qoidalari bilan olinadi.
Security policy resolve qilingan yakuniy URI’ni tekshiradi.
URI va IRI
IRI Unicode belgilarini kengroq ishlatishga imkon beradi.
Network protocolda u URI yoki percent-encoded/Punycode representationga aylantirilishi mumkin.
Display va actual host farqi phishingga ta’sir qilishi ehtimoli bor.
Security
URI bilan bog‘liq xavflar:
- open redirect;
- SSRF;
- userinfo chalkashligi;
- Unicode homograph;
- scheme abuse;
- path traversal;
- double encoding;
- credential leak;
- fragmentda token saqlash.
Allowlist parser ajratgan normalized komponentlar asosida ishlaydi.
Userinfo
Authority ichida tarixiy userinfo qismi bo‘lishi mumkin:
https://[email protected]@attacker.test/path
Bu misolda haqiqiy host attacker.test, oldingi qism esa userinfo. Browser displayini tez ko‘rgan user example.comni host deb adashtirishi mumkin. Web application external URLlarda userinfo’ni rad etishi yoki alohida ko‘rsatishi mumkin.
Default port
Scheme default portga ega bo‘lsa explicit va implicit yozuv bir resource’ga olib borishi mumkin:
https://example.com
https://example.com:443
Origin va canonicalization effective portni hisobga oladi.
URI template
API va link generationda placeholderli URI template ishlatilishi mumkin. Parameterlar contextga mos encoding qilinadi; tayyor URL string concatenation bilan qurilmaydi.
Trailing slash
/docs va /docs/ server routingiga qarab bir xil yoki boshqa resource bo‘lishi mumkin. Canonical redirect bitta variantni tanlaydi.
Bog‘liq tushunchalar
Uniform Resource Identifier, URL, URN, Scheme, Authority, Host, Path, Query, Fragment, Percent-encoding, IRI