Использование HTTP
Объект sock. может работать как HTTP-сервер. Это значит, что при выполнении определённых условий отдельные сокеты переключаются в режим HTTP и выдают данные в стиле, соответствующем функциональности HTTP-сервера.
Некоторые сведения о HTTP-сервере в Tibbo BASIC/C уже приводились в разделе Работа с HTML.
Когда сокет находится в режиме HTTP, ваша программа не управляет принимаемыми данными (HTTP-запросами) и лишь иногда управляет передаваемыми данными (HTTP-ответом).
В простейшем случае файл, возвращаемый веб-браузеру, статический - «фиксированная» HTML-страница, графика или другой файл. Обработка такого статического файла вообще не требует вмешательства вашей программы. Достаточно настроить сокет(ы) на приём HTTP-запросов, а остальное сделает объект sock.
Но чаще всего приходится создавать динамическую HTML-страницу. Динамические страницы содержат фрагменты кода на Tibbo BASIC/C. Встретив такой фрагмент в файле, отправляемом браузеру, объект sock. выполняет этот код. Код, в свою очередь, совершает какое-то действие: например, формирует и отправляет браузеру динамические данные или переходит в другое место HTML-файла.
HTTP-сервер, встроенный в объект sock., понимает два типа запросов - GET и POST. Оба могут нести «HTTP-переменные», которые сервер извлекает и передаёт коду на Tibbo BASIC.
Поддерживаемые типы содержимого (файлов)
В настоящее время явно поддерживаются следующие расширения (типы) файлов:
| Расширение | Поддержка | Возвращаемый Content-Type |
| .html | Все платформы | text/html |
| .txt | Все платформы | text/plain |
| .gif | Все платформы | image/gif |
| .jpg | Все платформы | image/jpg |
| .png | Все платформы | image/png |
| .ico | Все платформы | image/ico |
| .bmp | Все платформы | image/bmp |
| .svg | 32-разрядные платформы | image/svg+xml |
| .js | 32-разрядные платформы | text/javascript |
| .json | 32-разрядные платформы | application/json |
| .css | 32-разрядные платформы | text/css |
| .woff | 32-разрядные платформы | font/woff |
HTML-файлы могут содержать исполняемый код Tibbo BASIC/C. Это позволяет создавать динамический HTML-вывод.
Все остальные типы файлов всегда статические и отправляются браузеру «как есть». Однако есть способ программно формировать и такие файлы - см. Подстановка URL.
Некоторые типы файлов поддерживаются только на 32-разрядных платформах. Тип платформы указан на странице каждой платформы.
В настоящее время объект sock. может обращаться только к первым 65 534 байтам каждого файла, даже если реальный файл больше! Следите, чтобы все HTML-файлы (и другие файлы, которые будет возвращать встроенный сервер вашего устройства) не превышали 65 534 байт. Не путайте это с размером HTTP-вывода, который формирует HTTP-файл. Очень большой вывод может создаваться небольшим HTML-файлом (за счёт динамического формирования данных) - и это нормально.
Ограничение в 65 534 байта на самом деле относится к размеру скомпилированного HTML-файла. При компиляции проекта TIDE отделит статическую часть файла от фрагментов кода Tibbo BASIC/C. Значение имеет только размер скомпилированного файла.
Сжатие файлов (только 32-разрядные платформы)
На 32-разрядных платформах файлы всех типов, кроме HTML, можно прикреплять к проекту в сжатом виде - .gz.
Например, вместо picture.jpg можно сжать этот файл и прикрепить picture.jpg.gz. Веб-сервер TiOS обработает его правильно:
- Когда браузер запрашивает picture.jpg, сервер сначала ищет этот файл, а если не находит - ищет picture.jpg.gz. Если второй файл найден, он отдаётся браузеру с заголовком «Content-Encoding: gzip» в ответе.
- Сжатые HTML-файлы не поддерживаются. Дело в том, что HTML-файлы могут содержать исполняемый код Tibbo BASIC/C, поэтому TiOS должна хранить такие файлы в исходном, несжатом виде.
Дополнительные материалы:
В этом разделе: