VBScript: Отключите кэширование ответа от сервера до HTTP, ПОЛУЧАЮТ URL-запрос

Я хочу выключить кэш, используемый, когда вызов 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 не работало, следовательно мой вопрос.

11
задан therobyouknow 16 June 2010 в 17:09
поделиться

2 ответа

Я не думаю, что объект XMLHTTP сам реализует кэширование.

Вы посылаете новый запрос, как только вызываете .send() на него. Весь смысл кэширования заключается в том, чтобы избежать отправки запросов, но здесь этого не происходит (насколько можно судить по вашему примеру кода).

Но если объект используется в каком-то браузере, то браузер может реализовать кэширование. В этом случае обычный подход заключается в том, чтобы включить в утверждение кэш-брейкер: произвольный параметр URL, который вы изменяете каждый раз, когда делаете новый запрос (например, добавляете текущее время к URL).

В качестве альтернативы, вы можете заставить свой сервер отправлять Cache-Control: no-cache, no-store HTTP-заголовок и посмотреть, поможет ли это.

9
ответ дан 3 December 2019 в 07:10
поделиться

Вы можете использовать WinHTTP , который не кэширует ответы HTTP. Вы все равно должны добавить директиву управления кешем (Cache-control: no-cache) с помощью метода SetRequestHeader , поскольку он указывает промежуточным прокси-серверам и серверам не возвращать ранее кэшированный ответ.

5
ответ дан 3 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: