Век живи, блин

В API методе, который я делал для сервиса, в HTTP GET запросе заказчик хотел, чтобы одно из полей могло принимать список значений (id’шники юзеров) разделенных точкой с запятой. Вот примерно так:

/api/processUsers?user_ids=1;2;3;4;5

Реализовал нужную функцию в Go, запускаю тест и получаю предупреждение:

http: URL query contains semicolon, which is no longer a supported separator; parts of the query may be stripped when parsed; see golang.org/issue/25192

Оказалось, что W3C в рекомендациях от 1999 года, допускало использование точки с запятой, в качестве разделителя параметров URL, в дополнение к амперсанду.

Это было сделано для сохранения совместимости с SGML (предшественником HTML), в котором амперсанд всегда был началом мнемоники или кода символа (например & amp; или & #39;), откуда возникал конфликт с его использованием в URI. Поэтому, амперсанд в URI приходилось эскейпить, из-за чего уже возникали проблемы парсинга параметров на стороне сервера, а так же у браузера, в том, как их посылать. Поэтому и предложили бахнуть точку с запятой как разделитель, чтобы не иметь проблем с эскейпом.

А в 2014 году, W3C отменил эту рекомендацию и теперь допустимым символом является только амперсанд:

Let strings be the result of strictly splitting the string payload on U+0026 AMPERSAND characters (&).

Надо будет запомнить этот момент и проверять его в тест-кейсах во время обращения в веб-серверу.

Поделиться
Отправить
 177   2023   HTML   W3C
Популярное