Подстановка URL

HTML-файлы могут включать код BASIC и благодаря этому быть динамическими. Фактическое HTML-содержимое, которое получает браузер, может частично генерироваться вашим приложением Tibbo BASIC/C. Файлы других типов - простой текст, графика и т. д. - не могут содержать исполняемый код и по природе статичны. Такие файлы отправляются браузеру "как есть".

Что делать, если файл не HTML нужно сформировать динамически? Например, если требуется сгенерировать BMP-файл? Ответ - "подстановка URL". Её обеспечивает свойство sock.urlsubstitutes.

Свойство хранит список имён файлов (с расширениями), разделённых запятыми. Когда веб-сервер получает от браузера запрос на файл не HTML (скажем, "pix.bmp"), он сначала пытается найти этот файл среди HTML-файлов и файлов ресурсов проекта. Если такого файла нет, веб-сервер просматривает заданные подстановки. Если запрошенного файла нет и в списке, веб-сервер возвращает ошибку "404".

Если файл есть в списке заданных подстановок, сервер ищет файл с тем же именем, но с расширением ".html" ("pix.html"). Если такого файла нет, ответом снова будет ошибка "404". Если этот HTML-файл существует, сервер выдаёт его, но так, будто это файл исходного типа (сервер обрабатывает "pix.html", а браузер получает "pix.bmp").

Поскольку фактическая выдача "за кулисами" выполняется для HTML-файла, в него можно поместить собственный код и генерировать содержимое динамически. В следующем примере файл "pix.bmp" формируется динамически. Чтобы это работало, где-нибудь в разделе инициализации проекта нужно задать sock.urlsubstitutes = "pix.bmp". Вот что находится в файле "pix.html":

<?
   Dim x As Byte
   Dim s As String
   romfile.open("source.bmp")
   Do
      x=sock.txfree
      s=romfile.getdata(x)
      sock.setdata(s)
      sock.send
   Loop While Len(s)=x
?>

В этом примере мы просто читаем и выводим содержимое другого BMP-файла ("source.bmp"). Пользы от этого никакой: к графическому файлу можно было бы обратиться напрямую. Но ваш код вправе делать что угодно, и подстановка открывает путь к созданию изображения "на лету" или к динамической генерации содержимого других "статических" файлов.

Исходный материал Tibbo обновлён 11 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке