HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Определение формата и его устройство</a><ul><li><a>Синтаксис</a></li>
1 <ul><li><a>Определение формата и его устройство</a><ul><li><a>Синтаксис</a></li>
2 </ul></li>
2 </ul></li>
3 <li><a>Как работать с JSON</a><ul><li><a>Где объявлять Content-Type</a><ul><li><a>Типы носителей</a></li>
3 <li><a>Как работать с JSON</a><ul><li><a>Где объявлять Content-Type</a><ul><li><a>Типы носителей</a></li>
4 <li><a>Браузеры и информация Content-Type</a></li>
4 <li><a>Браузеры и информация Content-Type</a></li>
5 </ul></li>
5 </ul></li>
6 <li><a>Грамотный выбор Content-Type</a><ul><li><a>MIME application/json - особенности</a></li>
6 <li><a>Грамотный выбор Content-Type</a><ul><li><a>MIME application/json - особенности</a></li>
7 <li><a>MIME application/javascript</a></li>
7 <li><a>MIME application/javascript</a></li>
8 </ul></li>
8 </ul></li>
9 </ul></li>
9 </ul></li>
10 <li><a>Принцип работы Content-Type в HTML</a></li>
10 <li><a>Принцип работы Content-Type в HTML</a></li>
11 </ul><p>JSON - текстовый формат обмена данными. Элемент, который широко используется в клиент-серверных моделях и различных запросах. Он базируется на JavaScript. JSON - формат, который легко читается и понимается людьми. Он был разработан Дугласом Крокфордом.</p>
11 </ul><p>JSON - текстовый формат обмена данными. Элемент, который широко используется в клиент-серверных моделях и различных запросах. Он базируется на JavaScript. JSON - формат, который легко читается и понимается людьми. Он был разработан Дугласом Крокфордом.</p>
12 <p>JSON - это независимый язык, несмотря на то, что он произошел от JavaScript. Может широко использоваться практически любым языком программирования. Для большинства из них поддерживаются готовые кодовые фрагменты для создания и обработки информации в JSON-формате.</p>
12 <p>JSON - это независимый язык, несмотря на то, что он произошел от JavaScript. Может широко использоваться практически любым языком программирования. Для большинства из них поддерживаются готовые кодовые фрагменты для создания и обработки информации в JSON-формате.</p>
13 <p>Далее предстоит изучить этот элемент более подробно. Необходимо поближе познакомиться с упомянутым форматом, а также разобраться с его ключевыми особенностями и синтаксисом. Отдельное внимание предстоит уделить заголовкам JSON и определению типа контента для соответствующего формата. Представленная далее информация пригодится как разработчикам-новичкам, так и их более опытным коллегам.</p>
13 <p>Далее предстоит изучить этот элемент более подробно. Необходимо поближе познакомиться с упомянутым форматом, а также разобраться с его ключевыми особенностями и синтаксисом. Отдельное внимание предстоит уделить заголовкам JSON и определению типа контента для соответствующего формата. Представленная далее информация пригодится как разработчикам-новичкам, так и их более опытным коллегам.</p>
14 <h2>Определение формата и его устройство</h2>
14 <h2>Определение формата и его устройство</h2>
15 <p>JSON - это формат передачи данных на сервер и обратно. Чтобы лучше понимать его формат, необходимо рассмотреть наглядный пример: пусть имеется магазин с бонусной программой. Бонусы начисляются пользователю (покупателю) при помощи специальной скидочной карты. Когда продавец считывает его, он получает от сервера следующую информацию:</p>
15 <p>JSON - это формат передачи данных на сервер и обратно. Чтобы лучше понимать его формат, необходимо рассмотреть наглядный пример: пусть имеется магазин с бонусной программой. Бонусы начисляются пользователю (покупателю) при помощи специальной скидочной карты. Когда продавец считывает его, он получает от сервера следующую информацию:</p>
16 <ul><li>фамилию;</li>
16 <ul><li>фамилию;</li>
17 <li>имя;</li>
17 <li>имя;</li>
18 <li>отчество;</li>
18 <li>отчество;</li>
19 <li>телефон;</li>
19 <li>телефон;</li>
20 <li>город;</li>
20 <li>город;</li>
21 <li>возраст;</li>
21 <li>возраст;</li>
22 <li>количество накопленных баллов;</li>
22 <li>количество накопленных баллов;</li>
23 <li>три предыдущие покупки (чтобы можно было предложить к ним что-нибудь дополнительно).</li>
23 <li>три предыдущие покупки (чтобы можно было предложить к ним что-нибудь дополнительно).</li>
24 </ul><p>Вот соответствующий ответ в JSON-формате:</p>
24 </ul><p>Вот соответствующий ответ в JSON-формате:</p>
25 <p>Общим правилом формирования ответа является следующий принцип: сначала пишется название того или иного поля, а через двоеточие - его значение. Названия необходимо оформлять в двойных кавычках, как и строковые значения.</p>
25 <p>Общим правилом формирования ответа является следующий принцип: сначала пишется название того или иного поля, а через двоеточие - его значение. Названия необходимо оформлять в двойных кавычках, как и строковые значения.</p>
26 <p>Также необходимо помнить, что:</p>
26 <p>Также необходимо помнить, что:</p>
27 <ul><li>вложенные объекты оформляются в фигурных скобках;</li>
27 <ul><li>вложенные объекты оформляются в фигурных скобках;</li>
28 <li>прямоугольные скобки используются для оформления массивов;</li>
28 <li>прямоугольные скобки используются для оформления массивов;</li>
29 <li>после каждой пары "свойство: значение" необходимо ставить запятую (в самом конце она не ставится).</li>
29 <li>после каждой пары "свойство: значение" необходимо ставить запятую (в самом конце она не ставится).</li>
30 </ul><p>JSON - это универсальный формат передачи данных. Он используется большим количеством современных популярных языков программирования.</p>
30 </ul><p>JSON - это универсальный формат передачи данных. Он используется большим количеством современных популярных языков программирования.</p>
31 <h3>Синтаксис</h3>
31 <h3>Синтаксис</h3>
32 <p>JSON - это одна из двух структур, представленных в закодированной форме:</p>
32 <p>JSON - это одна из двух структур, представленных в закодированной форме:</p>
33 <ol><li>Набор "ключ: значение". Разные языки программирования реализовывают соответствующую пару различными способами: как записи, словари, хеш-таблицы, списки с ключами, ассоциативные массивы, а также различные структуры. В виде ключа допустимо использовать только строки, а значение - любая форма. Повторение ключей разрешены, но не рекомендуются стандартом. Обработка таких ситуаций непредсказуема и осуществляется на усмотрение каждого отдельно взятого программного обеспечения.</li>
33 <ol><li>Набор "ключ: значение". Разные языки программирования реализовывают соответствующую пару различными способами: как записи, словари, хеш-таблицы, списки с ключами, ассоциативные массивы, а также различные структуры. В виде ключа допустимо использовать только строки, а значение - любая форма. Повторение ключей разрешены, но не рекомендуются стандартом. Обработка таких ситуаций непредсказуема и осуществляется на усмотрение каждого отдельно взятого программного обеспечения.</li>
34 <li>Упорядоченный набор значений. У большинства языков программирования он представлен последовательностями, списками, векторами и массивами.</li>
34 <li>Упорядоченный набор значений. У большинства языков программирования он представлен последовательностями, списками, векторами и массивами.</li>
35 </ol><p>Структуры данных, используемые JSON-форматом, поддерживаются любым современным языком разработки. Это позволяет задействовать формат для информационного обмена между различными языками программирования и программными системами.</p>
35 </ol><p>Структуры данных, используемые JSON-форматом, поддерживаются любым современным языком разработки. Это позволяет задействовать формат для информационного обмена между различными языками программирования и программными системами.</p>
36 <p>В качестве значений JSON-допускает использование:</p>
36 <p>В качестве значений JSON-допускает использование:</p>
37 <ol><li>Записей. Они представляют собой неупорядоченное множество пар "ключ: значение", заключенное в фигурные скобки. Ключ описывается при помощи строки, между ним и значением ставится символ двоеточия. Отделяются соответствующие пары друг от друга при помощи запятых.</li>
37 <ol><li>Записей. Они представляют собой неупорядоченное множество пар "ключ: значение", заключенное в фигурные скобки. Ключ описывается при помощи строки, между ним и значением ставится символ двоеточия. Отделяются соответствующие пары друг от друга при помощи запятых.</li>
38 <li>Одномерных массивов. Это упорядоченное множество значений. Массивы заключаются в квадратные скобки, а их значения разделяются при помощи запятых. Соответствующие элементы могут быть пустыми. Значения в пределах одного и того же массива могут обладать разными типами.</li>
38 <li>Одномерных массивов. Это упорядоченное множество значений. Массивы заключаются в квадратные скобки, а их значения разделяются при помощи запятых. Соответствующие элементы могут быть пустыми. Значения в пределах одного и того же массива могут обладать разными типами.</li>
39 <li>Чисел - целых или вещественных.</li>
39 <li>Чисел - целых или вещественных.</li>
40 <li>Литералов - true, false или null.</li>
40 <li>Литералов - true, false или null.</li>
41 <li>Строк. Это упорядоченные множества из нуля или более символов в Unicode. Заключаются они в двойные кавычки. Символы могут быть указаны при помощи escape-последовательностей, которые начинаются с обратной косой черты. Они также записываются шестнадцатеричным кодом в кодировке Unicode в виде \uFFFF.</li>
41 <li>Строк. Это упорядоченные множества из нуля или более символов в Unicode. Заключаются они в двойные кавычки. Символы могут быть указаны при помощи escape-последовательностей, которые начинаются с обратной косой черты. Они также записываются шестнадцатеричным кодом в кодировке Unicode в виде \uFFFF.</li>
42 </ol><p>Строки напоминают литералы одноименного типа в JavaScript. Числа - JavaScript-числа, за исключением того, что используется только десятичный формат (с точкой в виде разделителя). Пробелы ставятся только между любыми двумя синтаксическими компонентами.</p>
42 </ol><p>Строки напоминают литералы одноименного типа в JavaScript. Числа - JavaScript-числа, за исключением того, что используется только десятичный формат (с точкой в виде разделителя). Пробелы ставятся только между любыми двумя синтаксическими компонентами.</p>
43 <p>Для работы с JSON-форматом поддерживаются две команды:</p>
43 <p>Для работы с JSON-форматом поддерживаются две команды:</p>
44 <ul><li>JSON.stringify() - для перевода объекта в JSON-строку, которая может быть отправлена на сервер;</li>
44 <ul><li>JSON.stringify() - для перевода объекта в JSON-строку, которая может быть отправлена на сервер;</li>
45 <li>JSON.parse() - для разбора JSON-данных на составляющие и отправку в них необходимых объектов или переменных.</li>
45 <li>JSON.parse() - для разбора JSON-данных на составляющие и отправку в них необходимых объектов или переменных.</li>
46 </ul><p>Также необходимо помнить о том, что каждый Интернет-ресурс имеет свой собственный тип носителя. Браузер должен знать его. Это необходимо для правильной и эффективной обработки данных. То же самое касается серверной части модели. Сервер должен знать тип отправляемых ему ресурсов для точного анализа и дальнейшей их обработки. Далее Content-Type application JSON будет рассмотрен более подробно. Это один из наиболее важных моментов при работе с изучаемым текстовым форматом.</p>
46 </ul><p>Также необходимо помнить о том, что каждый Интернет-ресурс имеет свой собственный тип носителя. Браузер должен знать его. Это необходимо для правильной и эффективной обработки данных. То же самое касается серверной части модели. Сервер должен знать тип отправляемых ему ресурсов для точного анализа и дальнейшей их обработки. Далее Content-Type application JSON будет рассмотрен более подробно. Это один из наиболее важных моментов при работе с изучаемым текстовым форматом.</p>
47 <h3>Где объявлять Content-Type</h3>
47 <h3>Где объявлять Content-Type</h3>
48 <p>Content-Type используется для указания типа носителя любого ресурса. Эта информация прописывается в свойствах header запроса JSON - на клиентской стороне, при непосредственной отправке сформированного запроса. Также допускается указание Content-Type в заголовке ответа на серверной стороне - тогда, когда клиенту направляется ответ.</p>
48 <p>Content-Type используется для указания типа носителя любого ресурса. Эта информация прописывается в свойствах header запроса JSON - на клиентской стороне, при непосредственной отправке сформированного запроса. Также допускается указание Content-Type в заголовке ответа на серверной стороне - тогда, когда клиенту направляется ответ.</p>
49 <p>Если тип контента ресурса не определен, клиент (браузер) может попытаться автоматически определить его. Результат обычно непредсказуем и неточен. Именно поэтому разработчику необходимо всегда объявлять тип носителя ресурса.</p>
49 <p>Если тип контента ресурса не определен, клиент (браузер) может попытаться автоматически определить его. Результат обычно непредсказуем и неточен. Именно поэтому разработчику необходимо всегда объявлять тип носителя ресурса.</p>
50 <h4><em>Типы носителей</em></h4>
50 <h4><em>Типы носителей</em></h4>
51 <p>Носители могут быть представлены различными формами:</p>
51 <p>Носители могут быть представлены различными формами:</p>
52 <ul><li>приложениями (application);</li>
52 <ul><li>приложениями (application);</li>
53 <li>аудиозаписями (audio);</li>
53 <li>аудиозаписями (audio);</li>
54 <li>текстом (text);</li>
54 <li>текстом (text);</li>
55 <li>шрифтами (font);</li>
55 <li>шрифтами (font);</li>
56 <li>"примерами" (example);</li>
56 <li>"примерами" (example);</li>
57 <li>изображениями (image);</li>
57 <li>изображениями (image);</li>
58 <li>моделями (model);</li>
58 <li>моделями (model);</li>
59 <li>смешанным типом (multipart);</li>
59 <li>смешанным типом (multipart);</li>
60 <li>сообщениями (message);</li>
60 <li>сообщениями (message);</li>
61 <li>видео (video).</li>
61 <li>видео (video).</li>
62 </ul><p>Данные категории тоже предусматривают собственными типы. Пример - content-type application/json - это подтип application, а text/html - подтип text.</p>
62 </ul><p>Данные категории тоже предусматривают собственными типы. Пример - content-type application/json - это подтип application, а text/html - подтип text.</p>
63 <h4><em>Браузеры и информация Content-Type</em></h4>
63 <h4><em>Браузеры и информация Content-Type</em></h4>
64 <p>Браузеры (клиенты) должны знать, какой тип контента будет им получен. Вот пример, демонстрирующий соответствующую ситуацию. Этот фрагмент представляет собой Node-сервер. Он занимается обслуживанием HTML-файла:</p>
64 <p>Браузеры (клиенты) должны знать, какой тип контента будет им получен. Вот пример, демонстрирующий соответствующую ситуацию. Этот фрагмент представляет собой Node-сервер. Он занимается обслуживанием HTML-файла:</p>
65 <p>Здесь необходимо обратить внимание на index.html, который обслуживается, а также на его Content-Type JSON с расширением text/css. Вот то, что содержится в index.html:</p>
65 <p>Здесь необходимо обратить внимание на index.html, который обслуживается, а также на его Content-Type JSON с расширением text/css. Вот то, что содержится в index.html:</p>
66 <p>HTML-документ отличается от CSS-документа. При запуске сервера localhost:5000 на экране появится следующий результат:</p>
66 <p>HTML-документ отличается от CSS-документа. При запуске сервера localhost:5000 на экране появится следующий результат:</p>
67 <p>Подтвердить полученный ответ можно при помощи проверки заголовков во вкладке сети в DevTools.</p>
67 <p>Подтвердить полученный ответ можно при помощи проверки заголовков во вкладке сети в DevTools.</p>
68 <p>Браузер будет получать контент в виде CSS-типа, поэтому он попытается произвести соответствующую обработку. Нужно также помнить о том, что полное значение Content-Type, получаемого браузером, снижает уязвимости безопасности. Это связано с тем, что клиенты (Интернет-обозреватели) хорошо знают, какие стандарты безопасности использовать для тех или иных данных.</p>
68 <p>Браузер будет получать контент в виде CSS-типа, поэтому он попытается произвести соответствующую обработку. Нужно также помнить о том, что полное значение Content-Type, получаемого браузером, снижает уязвимости безопасности. Это связано с тем, что клиенты (Интернет-обозреватели) хорошо знают, какие стандарты безопасности использовать для тех или иных данных.</p>
69 <h3>Грамотный выбор Content-Type</h3>
69 <h3>Грамотный выбор Content-Type</h3>
70 <p>JSON необходимо правильно интерпретировать в браузерах. Для этого требуется определить тип контента, обрабатываемого на клиентской стороне.</p>
70 <p>JSON необходимо правильно интерпретировать в браузерах. Для этого требуется определить тип контента, обрабатываемого на клиентской стороне.</p>
71 <p>Text/plain обычно используется для JSON. Официальным типом MIME для рассматриваемого формата является Content-Type application/json. Это значит, что при отправке JSON на сервер или получении соответствующего ответа, нужно всегда объявлять заголовок Content-Type. Данная особенность связано с тем, что application/json является стандартом, который понимает как клиент, так и сервер в клиент-серверных моделях.</p>
71 <p>Text/plain обычно используется для JSON. Официальным типом MIME для рассматриваемого формата является Content-Type application/json. Это значит, что при отправке JSON на сервер или получении соответствующего ответа, нужно всегда объявлять заголовок Content-Type. Данная особенность связано с тем, что application/json является стандартом, который понимает как клиент, так и сервер в клиент-серверных моделях.</p>
72 <h4><em>MIME application/json - особенности</em></h4>
72 <h4><em>MIME application/json - особенности</em></h4>
73 <p>Данный формат используется тогда, когда неизвестно, как планируется использовать имеющуюся информацию. Когда сведения необходимо просто извлечь с сервера в JSON-формате, они могут быть получены при помощи ссылок или из любого подходящего файла. Клиентская сторона получает информацию только в JSON-формате. Он может использоваться в виде ссылки на данные, а также форматироваться в режиме реального времени через внешнюю среду.</p>
73 <p>Данный формат используется тогда, когда неизвестно, как планируется использовать имеющуюся информацию. Когда сведения необходимо просто извлечь с сервера в JSON-формате, они могут быть получены при помощи ссылок или из любого подходящего файла. Клиентская сторона получает информацию только в JSON-формате. Он может использоваться в виде ссылки на данные, а также форматироваться в режиме реального времени через внешнюю среду.</p>
74 <p>Выше можно увидеть пример с PHP, в котором MIME-типом выступает application/json. Он просто извлекает словарь из заданной переменной, а потом помещает его в JSON-формат и выводит его.</p>
74 <p>Выше можно увидеть пример с PHP, в котором MIME-типом выступает application/json. Он просто извлекает словарь из заданной переменной, а потом помещает его в JSON-формат и выводит его.</p>
75 <h4><em>MIME application/javascript</em></h4>
75 <h4><em>MIME application/javascript</em></h4>
76 <p>Этот формат применяется тогда, когда использование информации предопределено. Он встречается в приложениях, в которых поддерживаются вызовы клиентских AJAX-программ. Application/javascript используется, если данные имеют тип JSON-P или JSONP.</p>
76 <p>Этот формат применяется тогда, когда использование информации предопределено. Он встречается в приложениях, в которых поддерживаются вызовы клиентских AJAX-программ. Application/javascript используется, если данные имеют тип JSON-P или JSONP.</p>
77 <p>Нотация JSONP-объектов или JavaScript с дополнением - то, что используется при заключении API в вызов функции. Функция будет определена в коде JS на клиентской стороне, а API - передаваться ей в качестве параметра. Это приводит к тому, что соответствующая операция действует подобно исполняемому JS-коду.</p>
77 <p>Нотация JSONP-объектов или JavaScript с дополнением - то, что используется при заключении API в вызов функции. Функция будет определена в коде JS на клиентской стороне, а API - передаваться ей в качестве параметра. Это приводит к тому, что соответствующая операция действует подобно исполняемому JS-коду.</p>
78 <p>В этом примере MIME-тип - это application/javascript. Он извлекает словарь из имеющейся переменной, преобразовывает информацию в JSON-формат и отправляет его в виде параметра при вызове функции на клиентской стороне.</p>
78 <p>В этом примере MIME-тип - это application/javascript. Он извлекает словарь из имеющейся переменной, преобразовывает информацию в JSON-формат и отправляет его в виде параметра при вызове функции на клиентской стороне.</p>
79 <p>Эксперты рекомендуют использоваться именно type application/json вместо application/javascript, поскольку JSON-данные не рассматриваются как JS-код. Это универсальный стандарт.</p>
79 <p>Эксперты рекомендуют использоваться именно type application/json вместо application/javascript, поскольку JSON-данные не рассматриваются как JS-код. Это универсальный стандарт.</p>
80 <h2>Принцип работы Content-Type в HTML</h2>
80 <h2>Принцип работы Content-Type в HTML</h2>
81 <p>С основами MIME удалось ознакомиться. Теперь можно рассмотреть принципы работы Content-Type в HTML простым языком.</p>
81 <p>С основами MIME удалось ознакомиться. Теперь можно рассмотреть принципы работы Content-Type в HTML простым языком.</p>
82 <p>Если клиент отправляет header Content-Type в запросе, он сообщит серверу, что данные в теле сформированного запроса были отформатированы определенным образом.</p>
82 <p>Если клиент отправляет header Content-Type в запросе, он сообщит серверу, что данные в теле сформированного запроса были отформатированы определенным образом.</p>
83 <p>Если клиент хочет отправить на серверную сторону JSON-данные, необходимо запомнить следующий алгоритм:</p>
83 <p>Если клиент хочет отправить на серверную сторону JSON-данные, необходимо запомнить следующий алгоритм:</p>
84 <ol><li>Необходимо установить Content-Type header application/json в запросе.</li>
84 <ol><li>Необходимо установить Content-Type header application/json в запросе.</li>
85 <li>Когда сервер получит запрос, он сначала проверит, может ли он распознать соответствующий формат. Если да - получится прочитать получаемую информацию.</li>
85 <li>Когда сервер получит запрос, он сначала проверит, может ли он распознать соответствующий формат. Если да - получится прочитать получаемую информацию.</li>
86 <li>Точно также принцип работает тогда, когда сервер отправляет клиенту ответ - он устанавливает Content-Type, чтобы сообщить клиентской стороне принципы чтения тела ответа.</li>
86 <li>Точно также принцип работает тогда, когда сервер отправляет клиенту ответ - он устанавливает Content-Type, чтобы сообщить клиентской стороне принципы чтения тела ответа.</li>
87 <li>Если клиент может общаться только в одном формате данных, он выдаст ошибку при наличии в ответе от сервера "несовместимой" информации. Исправить ситуацию поможет второй HTTP-заголовок.</li>
87 <li>Если клиент может общаться только в одном формате данных, он выдаст ошибку при наличии в ответе от сервера "несовместимой" информации. Исправить ситуацию поможет второй HTTP-заголовок.</li>
88 <li>HTTP-заголовок Accept используется, чтобы сообщать серверу, какие форматы данных он сможет принимать.</li>
88 <li>HTTP-заголовок Accept используется, чтобы сообщать серверу, какие форматы данных он сможет принимать.</li>
89 <li>Если установить для Accept значение "application/json", сервер будет отправлять ответы в JSON-формате.</li>
89 <li>Если установить для Accept значение "application/json", сервер будет отправлять ответы в JSON-формате.</li>
90 <li>Если сервер не поддерживает формат, который был ранее запрошен клиентом, он сможет направить на клиентскую сторону характерное сообщение об ошибке. Эта информация поможет понять, что присланная команда работать не будет.</li>
90 <li>Если сервер не поддерживает формат, который был ранее запрошен клиентом, он сможет направить на клиентскую сторону характерное сообщение об ошибке. Эта информация поможет понять, что присланная команда работать не будет.</li>
91 </ol><p>За счет заголовков Content-Type и Accept клиент и сервер способны обрабатывать различные форматы данных. А лучше понимать принципы функционирования клиент-серверных моделей помогут дистанционные компьютерные курсы.</p>
91 </ol><p>За счет заголовков Content-Type и Accept клиент и сервер способны обрабатывать различные форматы данных. А лучше понимать принципы функционирования клиент-серверных моделей помогут дистанционные компьютерные курсы.</p>
92 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
92 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
93  
93