Bosh sahifa Wiki Querystring

Querystring

QuerystringURI yoki URL ichida ? belgisidan keyin joylashadigan va server yoki client applicationga qo‘shimcha parameterlar uzatadigan matnli qism. U odatda filter, qidiruv, pagination, sorting va tracking qiymatlarini ifodalaydi.

Misol:

https://example.com/search?q=django&page=2

Bu yerda q=django&page=2 querystring hisoblanadi.

Parameter

Querystring ko‘pincha key-value juftliklardan tashkil topadi:

q=django
page=2
sort=date

Juftliklar & bilan ajratiladi:

q=django&page=2&sort=date

Aniq parsing qoidasi framework yoki applicationga bog‘liq.

Kalit va qiymat

Parameter:

name=value

ko‘rinishida bo‘ladi.

Qiymat bo‘sh bo‘lishi mumkin:

filter=

Tenglik belgisisiz parameter ham uchrashi mumkin:

debug

Application bunday holatning semantikasini o‘zi belgilaydi.

Percent-encoding

Reserved yoki oddiy URLda yozib bo‘lmaydigan byte’lar %HH ko‘rinishida encoded qilinadi:

q=web%20dasturlash

Bu web dasturlash qiymatini ifodalashi mumkin.

Encode va decode aynan parameter value darajasida bajariladi.

Plus belgisi

HTML form encodingda space ba’zan + bilan ifodalanadi:

q=web+dasturlash

Oddiy URI syntax’da + har doim space degani emas.

Parser application/x-www-form-urlencoded qoidalarini ishlatadimi, aniq bo‘lishi kerak.

Bir kalitning takrorlanishi

Bir key bir nechta qiymatga ega bo‘lishi mumkin:

tag=python&tag=django

Framework natijani:

  • birinchi qiymat;
  • oxirgi qiymat;
  • list;
  • multi-dict

sifatida qaytarishi mumkin.

Security check va business logic ayni semanticsdan foydalanishi kerak.

Array ifodasi

Array uchun yagona universal syntax yo‘q.

Variantlar:

tag=python&tag=django
tag[]=python&tag[]=django
tag=python,django

Client va server contractda bitta usulni kelishadi.

Comma qiymatning o‘zida bo‘lsa escaping muammosi yuzaga kelishi mumkin.

Nested object

Querystring nested data uchun turli framework-specific ko‘rinishlarga ega:

filter[status]=active
filter[role]=editor

Yoki dotted notation:

filter.status=active

Juda chuqur object parser resource’ini oshirishi mumkin.

Depth va parameter soni cheklanadi.

Form encoding

HTML GET form fieldlari querystringga aylantiriladi.

Masalan:

<form method="get">

submit qilinganda input nomlari va qiymatlari URLga qo‘shiladi.

Disabled yoki nomsiz fieldlar yuborilmasligi mumkin.

Qidiruv so‘zi query parameterda saqlansa URLni share va bookmark qilish mumkin:

/search?q=linux

Browser history va analytics search holatini ko‘radi.

Sensitive qidiruv qiymatlari log va referer orqali tarqalishi mumkin.

Pagination

Pagination parameterlari:

?page=3
?limit=20&offset=40
?cursor=abc123

Server maksimal limitni cheklaydi.

User juda katta limit bilan barcha data’ni bir requestda olishga majbur qila olmaydi.

Sorting

Sorting:

?sort=created_at
?order=desc

User yuborgan field SQL yoki query expressionga bevosita qo‘shilmaydi.

Allowed field va direction allowlistdan tanlanadi.

Filter

Filter querystringda ifodalanishi mumkin:

?status=active&region=tashkent

Har parameter type, allowed value va permission bo‘yicha tekshiriladi.

Frontendda filter mavjudligi backend authorizationni almashtirmaydi.

URL uzunligi

URI va serverlar amaliy maksimal uzunlikka ega.

Limit browser, proxy, web server va frameworkga qarab farq qiladi.

Katta structured payload querystringga emas, request body yoki boshqa usulga joylashtiriladi.

Cache

CDN va browser querystringni cache keyning bir qismi sifatida ko‘rishi mumkin.

Parameter tartibi yoki keraksiz tracking qiymatlari bir content uchun ko‘p cache entry yaratadi.

Canonicalization va parameter allowlist cache samaradorligini oshiradi.

Canonical URL

Filter va tracking parameterlari duplicate content yaratishi mumkin.

Canonical URL asosiy sahifani ko‘rsatadi.

Masalan, utm_* parameterlar contentni o‘zgartirmasa canonical ularsiz bo‘lishi mumkin.

Sensitive data

Querystring quyidagi joylarda ko‘rinishi mumkin:

Parol, access token, karta yoki maxfiy personal data querystringga yozilmaydi.

Query pollution

Bir parameter bir necha marta yuborilganda frontend, proxy va backend uni turlicha talqin qilishi mumkin.

Masalan:

role=user&role=admin

Bir qatlam birinchisini, boshqasi oxirgisini olsa validation bypass yuz beradi.

Barcha qatlam bir xil parsing semanticsga ega bo‘ladi.

Validation

Server:

ni tekshiradi.

Noto‘g‘ri parameterga aniq xato yoki e’tiborsiz qoldirish policy’si belgilanadi.

Query va Fragment

Query serverga HTTP request bilan yuboriladi.

Fragment #dan keyin bo‘lib, odatda serverga yuborilmaydi.

Shu sababli client-side state fragmentda, server filteri queryda bo‘lishi mumkin.

Parameter tartibi

Ko‘p application uchun:

?a=1&b=2

va:

?b=2&a=1

bir xil ma’noga ega. Ammo digital signature, cache yoki analytics raw stringga tayanishi mumkin. Canonical query parameterlarni nom bo‘yicha tartiblaydi, takroriy key va encoding qoidalarini aniq belgilaydi.

Boolean parameter

?active=true, ?active=1 va faqat ?active turli tizimda boshqa talqin qilinadi. API contract bitta formatni qabul qiladi va noaniq qiymatni rad etadi.

Query qurish

Client parameterlarni qo‘lda stringga qo‘shish o‘rniga URLSearchParamsga o‘xshash API ishlatadi. Bu encoding va takroriy qiymatlarni to‘g‘ri boshqaradi.

Bog‘liq tushunchalar

Query string, URL parameter, Percent-encoding, application/x-www-form-urlencoded, Pagination, Filtering, Sorting, URI, Fragment, HTTP request