2010-06-16 2 views
6

Windows 컴퓨터의 응용 프로그램에서 실행중인 VBScript에서 서버로 URL 호출을 할 때 사용되는 캐시를 해제하고 싶습니다. 어떤 기능/방법/객체를 사용합니까?VBScript : 서버에서 HTTP GET URL 요청에 대한 응답 캐싱 사용 안 함

처음으로 전화를 걸면 Linux 기반 Apache 서버는 호출이 실행중인 CGI Perl 스크립트에서 응답을 반환합니다. 그러나 이후 스크립트 실행은 처음과 동일한 응답을 사용하는 것으로 보이므로 데이터가 어딘지에 캐시됩니다. 내 서버 로그는 서버가 그 후속 시간에 처음으로 호출되는 것이 아니라는 것을 확인합니다.

이것은 내가하고있는 일입니다.


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(VS.85).aspx -별로 도움이되지 않습니다. 그리고 여기 : http://www.w3.org/TR/XMLHttpRequest/ - 매우 비우호적이며 읽기가 어렵습니다. 에 만료 설정 호출 클라이언트로 응답을 반환하는 서버 측 펄 CGI 스크립트의

발췌문 : 나는 또한 HTTP 헤더 설정 및 HTML 문서 헤더 메타 데이터를 사용하여 캐시를 사용하지 않는 강제하는 것을 시도하고있다


<html><head><meta http-equiv="CACHE-CONTROL" content="NO-CACHE"></head> 
<body> 
response message generated from server 
</body> 
</html> 

위의 HTTP 헤더 및 HTML 문서 헤드 설정 시간 : 클라이언트로 전송 응답 0


    print $httpGetCGIRequest->header(
     -type => 'text/html', 
     -expires => '+0s', 
     ); 

HTTP 헤더 설정 aven't, 따라서 내 질문.

답변

5

XMLHTTP 객체 자체는이 캐싱을 구현한다고 생각하지 않습니다.

.send()에 전화하는 즉시 새로운 요청을 보내십시오. 캐싱의 요점은 요청을 보내는 것을 피하는 것이지만 여기서는 (코드 예제가 실행되는 한) 발생하지 않습니다.

개체가 특정 종류의 브라우저에서 사용되는 경우 브라우저는 캐싱을 구현할 수 있습니다. 이 경우 공통 접근법은 캐시 차단기를 명령문에 포함시키는 것입니다. 새로운 요청 (예 : URL에 현재 시간 추가)을 할 때마다 변경하는 임의 URL 매개 변수입니다.

또는 서버가 Cache-Control: no-cache, no-store HTTP 헤더를 보내고 도움이되는지 확인할 수 있습니다.

<meta http-equiv="CACHE-CONTROL" content="NO-CACHE>은 아마도 쓸모가 없으므로 완전히 삭제할 수 있습니다.

+0

시간 내 주셔서 대단히 감사합니다. WinHttpRequest.5.1 COM 개체가 캐시되지 않는 것을 발견했습니다. 그러나 나는 자신감을 얻기 위해 더 넓은 테스트를해야 할 것입니다. +1 다른 - 각 - 시간 팁에 대한 +1 - 그건 분명히 고려해야 할 팁입니다 - 나는 WinHttpRequest.5.1뿐만 아니라 그 여분의 URL 매개 변수에 대처하기 위해 서버를 확장 할 수 있습니다. 아마도 time-of-request 필드를 고정밀 도로 포함 할 것입니다. 아마도 밀리 세컨드 일 겁니다. 해결책의 일부로 고려할 가치가 있습니다. – therobyouknow

+0

이제 임의의 URL 제안이 경로 원인 - 캐싱에 도달하여이를 깨뜨린 후 코드를 서버에 매번 강제로 연결할 수 있도록 허용 된 대답입니다. – therobyouknow

+1

고유 한 세션 ID 번호를 만들려면 VB 함수에서 작성된 날짜 및 타이머, 임의의 숫자, 스크립트 날짜가 현재 날짜 인 PC의 컴퓨터 이름/호스트 이름을 사용하고 있습니다. 타이머는 경과 된 시간을 나타냅니다. 밀리 초. 난수와 컴퓨터 ID와 함께 HTTP GET URL 호출이 고유해야합니다. 2 개의 동일한 URL 호출이 동일 할 확률은 0입니다. – therobyouknow

4

HTTP 응답을 캐시하지 않는 WinHTTP을 사용할 수 있습니다. 중간 프록시와 서버가 이전에 캐시 된 응답을 반환하지 않도록 지시하기 때문에 SetRequestHeader 메서드를 사용하여 캐시 제어 지시문 (Cache-control : no-cache)을 추가해야합니다.

+0

그래서 XMLHTTP 객체는 요청을 캐시합니까? – Tomalak

+1

사실, 원래 지점을 지원하는 것은 아니어야합니다. – Garett

+0

+1하고 대답했습니다. WinHttp를 조회하고 WinHttp.WinHttpRequest.5.1을 사용했습니다. 약간의 추가 연구 후에. 당신의 제안은 이것에 씨앗을 제공해주었습니다. 이는 캐싱이 발생하지 않는다는 점에서 성공적입니다. 지금해야 할 일은 자신감을 높이기 위해이 스크립트의 테스트 (예 : 다른 컴퓨터/구성)를 넓히는 것입니다. 이 개체의 기본 캐싱 구성이 컴퓨터마다 다른 이유가 있습니까? – therobyouknow

3

XMLHTTP 요청에 의해 타겟팅 된 응용 프로그램 (사용자의 경우에 해당)을 제어 할 수 있으면 응답에 no-cache 헤더를 보낼 수 있습니다. 이 경우 내 문제가 해결되었습니다.

Response.AppendHeader("pragma", "no-cache"); 
Response.AppendHeader("Cache-Control", "no-cache, no-store"); 

대체 방법으로 각 요청 된 URL에 임의의 숫자가 포함 된 쿼리 문자열을 추가 할 수도 있습니다.

관련 문제