Как получить при обращении к хостингу данные из адресной строки браузера и точного времени сервера?

Какой код нужно поместить на хостинге, чтобы
по обращению из клиентского браузера
получать, например, следующее:

my_name.myhost.org/info_01

<html>
   <head>
      <meta name="color-scheme" content="light dark">
      <meta charset="utf-8">
   </head>
   <body>
      <pre>{"id": "info_01", "dt": "2025-08-17T18:55:12+08:00"}</pre>
   </body>
</html>

my_name.myhost.org/info_02

<html>
   <head>
      <meta name="color-scheme" content="light dark">
      <meta charset="utf-8">
   </head>
   <body>
      <pre>{"id": "info_02", "dt": "2025-08-17T18:55:16+08:00"}</pre>
   </body>
</html>

т.е. выводить в браузере значения:
id - взятое из строки обращения,
dt - время сервера хостинга, в момент получения запроса сервером
или в момент ответа сервера.

Дату-время сервера нужно получить максимальной точности, если возможно,
- то отдельно передать (добавить в вышеприведенный json)
в мкс все доступные пары значений, например:
dt1 (время получения запроса сервером) - ... мкс,
dt2 (время отправки ответа сервером) - ... мкс.
В данном случае получать в браузере клиентское время не основная задача,
но также вывести точное клиентское (до мкс), - лишним не будет.


тег php, потому что вы хотите в виде ответа код на PHP?


Если на js сделать приведенное выше невозможно, то может так:
на хостинге создать файлы

my_name.myhost.org/info_01.php
my_name.myhost.org/info_02.php

в каждом код, типа:

<?php
$date = new DateTime();
$dt = $date->format("Y-m-d H:i:s.u");
$info = mb_substr(basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']), 0, -4);
echo "<!DOCTYPE html>
    <html lang=\"en\">
     <head>
       <meta charset=\"utf-8\">
       <meta http-equiv=\"expires\" content=\"0\" />
       <meta http-equiv=\"Cache-Control\" content=\"no-cache\" />
       <link href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII\" rel=\"icon\" type=\"image/x-icon\" />
       <title>info_01</title>
     </head>
     <body><pre>{\"id\":\"{$info}\", \"dt\":\"{$dt}\"}</pre></body>
    </html>"
?>

только откорректировать с учетом вопроса.


Ответы (1 шт):

Автор решения: BlackStar1991

Смотря, что у вас там на хостинге крутиться. (Я про серверный язык/CMS) Самый банальный вариант, это написать на чистом JS а данные вставляемые в шаблон HTML документа. Первый параметр из Заголовка забирать, а вторым забирать Время и выводить. Такое постоянно на всяких гемблиговых заманухах ставят... по типу персонализированая реклама.

   (async function () {
        const pre = document.querySelector('pre');

        const segments = location.pathname.split('/').filter(Boolean);
        const id = segments.length ? segments[segments.length - 1] : 'root';

        // Попробуйте получить время сервера из заголовка HTTP «Date» с помощью запроса HEAD с того же источника.
       
        async function fetchServerDate(url) {
          try {
            const res = await fetch(url, { method: 'HEAD', cache: 'no-store', redirect: 'follow' });
            const dateHeader = res.headers.get('Date');
            return dateHeader ? new Date(dateHeader) : null;
          } catch (_) {
            return null;
          }
        }

        // текущий URL; Резервный: корневой каталог (помогает, когда сама страница обслуживается из кэша/CDN-слоя)
        let serverDate = await fetchServerDate(location.href);
        if (!serverDate) serverDate = await fetchServerDate(location.origin + '/');

        // Если дата сервера недоступна (редко из-за CORS или экзотического хостинга), переключитесь на часы клиента.
        const dtDate = serverDate || new Date();
        const isoWithOffset = dtDate.toISOString().replace('Z', '+00:00');

        pre.textContent = JSON.stringify({ id, dt: isoWithOffset }, null, 0);
      })();
<pre>{"id": null, "dt": null}</pre>

Но тут надо ещё предусматривать, что пользователи могут пойти по "не правильных" адрессах + если пользователя было средирекшено на такую страницу, то тоже может не работать. (надо проводить тесты)

→ Ссылка