<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Артёма Агасиева: заметки с тегом W3C</title>
<link>https://agasiev.com/tags/w3c/</link>
<description>Telegram: @aagasiev</description>
<author>Артём Агасиев</author>
<language>ru</language>
<generator>E2 (v3576; Aegea)</generator>

<itunes:owner>
<itunes:name>Артём Агасиев</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Telegram: @aagasiev</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Век живи, блин</title>
<guid isPermaLink="false">102</guid>
<link>https://agasiev.com/all/semicolon-as-uri-param-separator/</link>
<pubDate>Fri, 24 Mar 2023 17:09:17 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/semicolon-as-uri-param-separator/</comments>
<description>
&lt;p&gt;В API методе, который я делал для сервиса, в HTTP GET запросе заказчик хотел, чтобы одно из полей могло принимать список значений (id’шники юзеров) разделенных точкой с запятой. Вот примерно так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;/api/processUsers?user_ids=1;2;3;4;5&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Реализовал нужную функцию в Go, запускаю тест и получаю предупреждение:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;http: URL query contains semicolon, which is no longer a supported separator; parts of the query may be stripped when parsed; see &lt;a href="golang.org/issue/25192"&gt;golang.org/issue/25192&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Оказалось, что W3C в рекомендациях от 1999 года, &lt;a href="http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.2.2"&gt;допускало&lt;/a&gt; использование точки с запятой, в качестве разделителя параметров URL, в дополнение к амперсанду.&lt;/p&gt;
&lt;p&gt;Это было сделано для сохранения совместимости с SGML (предшественником HTML), в котором амперсанд всегда был началом мнемоники или кода символа (например &amp; amp; или &amp; #39;), откуда возникал конфликт с его использованием в URI. Поэтому, амперсанд в URI приходилось эскейпить, из-за чего уже возникали проблемы парсинга параметров на стороне сервера, а так же у браузера, в том, как их посылать. Поэтому и предложили бахнуть точку с запятой как разделитель, чтобы не иметь проблем с эскейпом.&lt;/p&gt;
&lt;p&gt;А в 2014 году, &lt;a href="https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#url-encoded-form-data"&gt;W3C отменил эту рекомендацию&lt;/a&gt; и теперь допустимым символом является только амперсанд:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;Let strings be the result of strictly splitting the string payload on U+0026 AMPERSAND characters (&amp;).&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Надо будет запомнить этот момент и проверять его в тест-кейсах во время обращения в веб-серверу.&lt;/p&gt;
</description>
</item>


</channel>
</rss>