#php #request
#php #запрос
Вопрос:
Есть ли способ проверить с помощью PHP, является ли текущий запрос прямым запросом, который был явно инициирован пользователем (например, путем открытия http://myhost.local/test в браузере) или, если это запрос, который был инициирован браузером самостоятельно, например, через ссылки на скрипт или ссылки в разметке?
Я думаю, что HTTP_REFERER var не является хорошим вариантом. Иногда он не устанавливается браузером, и нет точек, которые позволили бы мне использовать var для определения источника запроса. Параметр запроса настроек к ресурсам, которые могут не загружаться в качестве маркера, также не является удовлетворительным вариантом — он подвержен ошибкам. Я думаю, что идентификация прямых и косвенных запросов по пути, в котором они находятся (или должны быть), не является чистым и элегантным решением.
Проблема: мы получили внутреннюю структуру компании для статических веб-страниц. Этот фреймворк использует php-маршрутизатор для получения хороших смарт-URL. Запросы автоматически сверяются с файлами страниц в файловой системе, и если для запроса нет файла, пользователю отображается пользовательская страница 404, поступающая через php-файл в проекте.
И вот тут возникает проблема: пользователю, который запрашивает что-либо, чего не существует, будет показана пользовательская страница 404 — это совершенно нормально. Но этого не должно происходить, если сам браузер (вместо пользователя) запрашивает ресурсы (например, изображения, javascript или css-файлы), потому что это приведет к загрузке всей платформы со всеми модулями только для отправки пользовательских 404 страниц в браузер background / nirvana. Это значительно замедляет загрузку страницы, если ресурсы не существуют, особенно если существует несколько ресурсов, которые не существуют.
Я знаю, что случай с существующими ресурсами даже не должен происходить, но при создании страниц время от времени случается, что чего-то не хватает, и я просто хочу, чтобы фреймворк был более чистым и немного ускорял процесс — так что в любом случае я просто хочу, чтобы фреймворк различал прямые и косвенные запросы.
Комментарии:
1. Вероятно, вам следует рассматривать заголовки
Accept
HTTP-запросов как основной отличительный признак. Но если это просто оптимизация производительности, я бы предпочел решить эту проблему с помощью кэширования на веб-сервере или какого-либо CDN. Да, первый переход к URL-адресу 404 все равно вызовет запуск фреймворка, но как только это произойдет, страницу 404 можно будет кэшировать и использовать повторно.2. Использование Accept-Header — отличный совет! Я думаю, что это может завести меня дальше — проверю это. Большое вам спасибо! И спасибо за заметки о том, что, возможно, следование совершенно неправильной концепции привело меня к этой проблеме. Спасибо!