Код Читати оригінал на The Register 2 хв читання 1

HTTP отримав метод QUERY для складних пошукових запитів

За даними британського технологічного видання The Register, Інженерна рада інтернету (IETF) офіційно затвердила новий стандарт RFC 10008, який додає метод QUERY до протоколу HTTP. Це рішення покликане усунути компроміси між методами GET та POST при виконанні складних пошукових запитів. Нове доповнення дозволить вебдодаткам передавати великі масиви даних у тілі запиту, зберігаючи при цьому переваги кешування.

#HTTP #IETF #RFC 10008 #QUERY
Офіційний чорно-білий логотип IETF на білому тлі
Офіційний чорно-білий логотип IETF на білому тлі · Джерело зображення: The Register

Подолання компромісу між GET та POST

Протягом багатьох років розробники API стикалися з дилемою під час проєктування систем пошуку та фільтрації. Метод GET є семантично чистим та безпечним для читання даних, однак він передає всі параметри безпосередньо в URL. Це призводить до обмежень на довжину адреси в браузерах та на проксі-серверах, а також створює ризики витоку чутливих даних у системні логи. Як альтернативу розробники використовували POST, який дозволяє надсилати великі обсяги структурованих даних у форматі JSON у тілі запиту.

Проте використання POST суперечить архітектурі REST, оскільки цей метод вважається «небезпечним» та неідемпотентним — сервер припускає, що такий запит може змінити його стан. Через це проміжні вузли мережі, як-от CDN та реверс-проксі, не кешують результати POST-запитів і не повторюють їх автоматично в разі збою зв'язку.

Рішення у специфікації RFC 10008

Новий метод QUERY, розроблений за участі інженерів з компаній Cloudflare, Akamai та greenbytes, пропонує гібридний підхід. Він успадковує безпеку та ідемпотентність методу GET, але водночас офіційно дозволяє передавати тіло запиту, як це робить POST. Це дає розробникам можливість будувати гнучкі інтерфейси для складних пошукових запитів, наприклад, для GraphQL або вкладених JSON-фільтрів.

Ключовою перевагою QUERY є його повна сумісність із мережевим кешуванням. Якщо проксі-сервер або CDN налаштовані на роботу з новим стандартом, вони включають вміст тіла запиту до ключа кешування. У результаті повторні пошукові запити з однаковими параметрами обслуговуватимуться миттєво з кешу на межі мережі, не навантажуючи основну базу даних додатка.

Перешкоди на шляху до адаптації

Попри офіційну публікацію RFC 10008, розгортання методу QUERY на практиці натрапляє на труднощі. Бамагаючи застарілих брандмауерів вебдодатків (WAF) та балансувальників навантаження розпізнають лише класичний набір методів і можуть блокувати або відхиляти QUERY-запити як потенційні загрози. Окрім цього, на рівні браузерів використання нового методу наразі викликає запуск попереднього preflight-запиту OPTIONS через правила CORS. Творці стандарту зазначають, що повноцінна інтеграція в екосистему мов програмування та вебфреймворків триватиме кілька років, доки розробники інструментарію не оновлять свои маршрутизатори.

Контекст для України

Стандартизація методу QUERY розв'язує давню проблему для українських розробників із таких компаній як SoftServe та Genesis, які створюють складні вебсервіси. Досі для передачі великих фільтрів пошуку доводилося використовувати POST-запити, що унеможливлювало їхнє кешування на рівні CDN, або GET, який обмежений довжиною URL. З впровадженням RFC 10008 українські e-commerce платформи, як-от Rozetka, зможуть нативно кешувати результати складного пошуку, знижуючи навантаження на сервери до 35%. Однак це вимагатиме від українських системних адміністраторів оновлення налаштувань вебсерверів Nginx та систем захисту WAF, які за замовчуванням блокують нові HTTP-методи.

Часті запитання

Чому розробники не можуть використовувати метод GET для складних пошукових запитів?
Метод GET не підтримує передачу тіла запиту, тому всі параметри доводиться кодувати в URL. Це обмежує довжину адреси в браузерах та проксі-серверах, а також створює ризики витоку конфіденційної інформації через серверні логи.
Яка головна перевага методу QUERY порівняно з методом POST?
На відміну від POST, метод QUERY визначено як безпечний та ідемпотентний. Це дозволяє мережевим посередникам, таким як CDN та реверс-проксі, вільно кешувати результати запитів та автоматично повторювати їх у разі збою зв'язку.
З якими труднощами стикається впровадження стандарту RFC 10008?
Багато застарілих мережевих екранів (WAF) та балансувальників не знають про QUERY і блокують такі запити. Крім того, у браузерах діють правила CORS, що змушує виконувати попередні OPTIONS-запити.
Telegram

Свіжі новини у нашому Telegram

Отримуйте миттєві сповіщення про нові публікації в рубриці «Код»

@procodeandevenmore