У меня есть PHP-скрипт, который запускает внешний процесс.
Внешний процесс выводит строку JSON с данными из системы, которые время от времени меняются.
Когда я запускаю внешний процесс, я ясно вижу, что строка JSON каждый раз меняется.
Однако, когда я вызываю свой PHP-скрипт с помощью AJAX из веб-браузера, строка JSON не обновляется после первого вызова PHP-скрипта.
Единственный раз, когда строка JSON обновляется, — это если я обновляю страницу или запускаю внешний процесс вручную, пока я нахожусь на веб-сайте.
Почему это происходит?
Кэширует ли LIGHTTPD вывод?
ИЗМЕНИТЬ:
Вот содержимое моего конфигурационного файла LIGHTTPD:
server.modules = (
"mod_access",
"mod_cgi",
"mod_alias",
"mod_compress",
"mod_redirect",
# "mod_rewrite",
)
server.document-root = "/var/www"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
$HTTP["url"] =~ "/cgi-bin/" {
cgi.assign = ( "" => "" )
}
cgi.assign = (
".cgi" => ""
)
ИЗМЕНИТЬ
Согласно следующей ветке продуктов Google, человек по имени johnjbarton
упоминает следующее:
Хорошо, я поговорил с экспертом по кешу Chrome. Проблема в моем случае, скорее всего, описана в этой ошибке: Ошибка 30862 - Динамически вставленные подресурсы не проверяются повторно, даже когда содержащий документ перезагружается https://bugs.webkit.org/show_bug.cgi?id=30862
Принудительное обновление только принудительно загружает ресурс на внешней странице. Он не принудительно обновляет загруженные ресурсы XHR. Это практически все ресурсы приложения додзё.
Когда я смотрю на консоль Chrome в разделе Network
, он говорит, что все запросы, которые делает мой сайт, относятся к типу XHR
.
Может ли это быть как-то связано?
ИЗМЕНИТЬ
Заголовки моего запроса
Accept */*
Content-Type application/x-www-form-urlencoded
ОЧЕНЬ ВАЖНОЕ РЕДАКТИРОВАНИЕ Я отредактировал свой PHP-скрипт, чтобы он добавлял результаты выполняемого процесса в файл журнала.
Получается, что результат процесса всегда одинаков.
Однако, когда я запускаю процесс вручную, он постоянно меняется, как и ожидалось.
Мне кажется, что LIGHTTPD кэширует вывод выполняемого им процесса.
ИЗМЕНИТЬ
Вот как выглядит мой PHP-скрипт:
<?php
session_start();
if(!isset($_SESSION['user'])){
header("Location: /");
} else {
header('Content-type: application/json');
$output = shell_exec('/home/debian/myProcess/myProcess');
file_put_contents("/var/log/lighttpd/access.log", $output, FILE_APPEND | LOCK_EX);
echo $output;
}
?>
http://example.com/ajax.php?action=ping
, чтобы браузер не кэшировал ответ, который вы могли бы вместо этого вызватьhttp://example.com/ajax.php?action=ping&nocache=1456765882
. Поскольку этот URL-адрес отличается, браузер отправит запрос на сервер, а не получит что-то из своего кеша. - person Eborbob   schedule 29.02.2016Content-Type
вы используете для отправки JSON? - person Will   schedule 01.03.2016header('Content-type: application/json');
- person vaid   schedule 01.03.2016/home/debian/myProcess/myProcess
в коде выше)? Что произойдет, если вы измените его на/bin/date
или что-то еще в этом роде? - person Eborbob   schedule 01.03.2016/bin/date
работает безупречно. Время обновляется и принимается веб-браузером - person vaid   schedule 01.03.2016