Век живи, блин
В 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 (&).
Надо будет запомнить этот момент и проверять его в тест-кейсах во время обращения в веб-серверу.