Я хочу выключить кэш, используемый, когда вызов URL к серверу выполняется от VBScript, работающего в рамках приложения на машине Windows. Какую функцию/метод/объект я использую, чтобы сделать это?
Когда вызов выполняется впервые, мой основанный на Linux сервер Apache возвращает ответ назад из скрипта Perl CGI, который он запускает. Однако последующие выполнения сценария, кажется, используют тот же ответ что касается первого раза, таким образом, данные кэшируются где-нибудь. Мои журналы сервера подтверждают, что сервер не называют в те последующие времена, только в первый раз.
Это - то, что я делаю. Я использую следующий код из коммерческого применения (не хотите упоминать это приложение, вероятно, не относящееся к моей проблеме):
With CreateObject("MSXML2.XMLHTTP")
.open "GET", "http://myserver/cgi-bin/nsr/nsr.cgi?aparam=1", False
.send
nsrresponse =.responseText
End With
Существует ли функция/метод на вышеупомянутом объекте выключить кэширование, или я должен называть метод/функцию для выключения кэширования на объекте ответа прежде, чем сделать URL?
Я искал здесь решение: http://msdn.microsoft.com/en-us/library/ms535874 (По сравнению с 85) .aspx - достаточно не совсем полезный. И здесь: http://www.w3.org/TR/XMLHttpRequest/ - очень недружелюбный и твердый читать.
Я также пытаюсь вызвать не использование кэша с помощью http настройки заголовка и метаданные заголовка документа HTML:
Отрывок Perl серверной стороны сценарий CGI, который возвращает ответ назад звонящему клиенту, истечению набора к 0.
print $httpGetCGIRequest->header(
-type => 'text/html',
-expires => '+0s',
);
Настройки заголовка Http в ответ переданы обратно клиенту:
response message generated from server
Вышеупомянутое http заголовок и настройки заголовка документа HTML не работало, следовательно мой вопрос.
Я не думаю, что объект XMLHTTP сам реализует кэширование.
Вы посылаете новый запрос, как только вызываете .send()
на него. Весь смысл кэширования заключается в том, чтобы избежать отправки запросов, но здесь этого не происходит (насколько можно судить по вашему примеру кода).
Но если объект используется в каком-то браузере, то браузер может реализовать кэширование. В этом случае обычный подход заключается в том, чтобы включить в утверждение кэш-брейкер: произвольный параметр URL, который вы изменяете каждый раз, когда делаете новый запрос (например, добавляете текущее время к URL).
В качестве альтернативы, вы можете заставить свой сервер отправлять Cache-Control: no-cache, no-store
HTTP-заголовок и посмотреть, поможет ли это.
Вы можете использовать WinHTTP , который не кэширует ответы HTTP. Вы все равно должны добавить директиву управления кешем (Cache-control: no-cache) с помощью метода SetRequestHeader , поскольку он указывает промежуточным прокси-серверам и серверам не возвращать ранее кэшированный ответ.