{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог Артёма Агасиева: заметки с тегом W3C",
    "_rss_description": "Telegram: @aagasiev",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/agasiev.com\/tags\/w3c\/",
    "feed_url": "https:\/\/agasiev.com\/tags\/w3c\/json\/",
    "icon": "https:\/\/agasiev.com\/user\/userpic@2x.jpg?1529202066",
    "author": {
        "name": "Артём Агасиев",
        "url": "https:\/\/agasiev.com\/",
        "avatar": "https:\/\/agasiev.com\/user\/userpic@2x.jpg?1529202066"
    },
    "items": [
        {
            "id": "102",
            "url": "https:\/\/agasiev.com\/all\/semicolon-as-uri-param-separator\/",
            "title": "Век живи, блин",
            "content_html": "<p>В API методе, который я делал для сервиса, в HTTP GET запросе заказчик хотел, чтобы одно из полей могло принимать список значений (id’шники юзеров) разделенных точкой с запятой. Вот примерно так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/api\/processUsers?user_ids=1;2;3;4;5<\/code><\/pre><p>Реализовал нужную функцию в Go, запускаю тест и получаю предупреждение:<\/p>\n<blockquote>\n<p><i>http: URL query contains semicolon, which is no longer a supported separator; parts of the query may be stripped when parsed; see <a href=\"golang.org\/issue\/25192\">golang.org\/issue\/25192<\/a><\/i><\/p>\n<\/blockquote>\n<p>Оказалось, что W3C в рекомендациях от 1999 года, <a href=\"http:\/\/www.w3.org\/TR\/1999\/REC-html401-19991224\/appendix\/notes.html#h-B.2.2\">допускало<\/a> использование точки с запятой, в качестве разделителя параметров URL, в дополнение к амперсанду.<\/p>\n<p>Это было сделано для сохранения совместимости с SGML (предшественником HTML), в котором амперсанд всегда был началом мнемоники или кода символа (например & amp; или & #39;), откуда возникал конфликт с его использованием в URI. Поэтому, амперсанд в URI приходилось эскейпить, из-за чего уже возникали проблемы парсинга параметров на стороне сервера, а так же у браузера, в том, как их посылать. Поэтому и предложили бахнуть точку с запятой как разделитель, чтобы не иметь проблем с эскейпом.<\/p>\n<p>А в 2014 году, <a href=\"https:\/\/www.w3.org\/TR\/2014\/REC-html5-20141028\/forms.html#url-encoded-form-data\">W3C отменил эту рекомендацию<\/a> и теперь допустимым символом является только амперсанд:<\/p>\n<blockquote>\n<p><i>Let strings be the result of strictly splitting the string payload on U+0026 AMPERSAND characters (&).<\/i><\/p>\n<\/blockquote>\n<p>Надо будет запомнить этот момент и проверять его в тест-кейсах во время обращения в веб-серверу.<\/p>\n",
            "date_published": "2023-03-24T17:09:17+03:00",
            "date_modified": "2023-03-25T01:42:06+03:00",
            "_date_published_rfc2822": "Fri, 24 Mar 2023 17:09:17 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "102",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3576,
    "_e2_ua_string": "E2 (v3576; Aegea)"
}