2009-12-14 2 views
2

서버에서 이미지가 업데이트 된 경우 페이지에 이미지를 다시로드하고 싶습니다. other questions에서는 이미지를 다시로드 할 강제로자바 스크립트로 이미지 새로 고침 (서버에서 변경 한 경우에만)

newImage.src = "http://localhost/image.jpg?" + new Date().getTime(); 

처럼 뭔가를 제안되었다,하지만 그것이 정말 이 변경되지 않은 경우에도 다시 다운로드받을 것을 의미합니다.

If-Modified-Since 헤더와 함께 동일한 이미지가 생성되도록 요청하는 Javascript 코드가 있습니까? 이미지가 실제로 변경된 경우에만 다운로드됩니다.

업데이트 : 여전히 혼란 스럽습니다. 일반적인 URL 만 요청하면 로컬 캐시 된 사본이 생성됩니다. (서버가 캐시 할 수 없도록 표시하지 않는 한, 실제로 변경되지 않는 한 전체 아이디어는 다시 다운로드하지 않기 때문에 그렇게하지 않으려 고합니다.) URL을 변경하면 이 항상이됩니다. 새 URL의 요점은 캐시를 깨뜨리는 것이기 때문에 다시 다운로드하십시오. 그렇다면 내가 원하는 중간 동작을 얻는 방법, 즉 로컬 캐시 된 복사본과 일치하지 않는 경우에만 파일을 다운로드하려면 어떻게해야합니까?

+0

서버가 올바르게 구성되어 있으면 (예 : Etag/Last-Modified를 지원하는 경우) 클라이언트/프록시/캐시 계층은 서버가 전송 한 내용을 준수해야합니다. – jldupont

+0

이 댓글의 의미가 확실하지 않습니다. 원래 이미지 URL로 src를 다시 설정하고 마지막에 여분의 가짜 타임 스탬프를 추가하지 않으면 이미지를 새로 고쳐야하는 서버가 올바르게 구성되어 있다고 말하는 것입니까? –

+0

서버가 올바르게 구성된 경우 클라이언트가 "If-Modified-Since"헤더가있는 자원을 요청하면 서버는 "304"상태 코드로 응답합니다. 즉, 클라이언트가 "If-Modified-Since"헤더로 요청하는 것만으로는 충분하지 않습니다. 서버는 공을 너무 재생해야합니다. – jldupont

답변

1

자바 스크립트는 서버에서 이벤트를 수신 할 수 없습니다. 대신 이미지를 변경했는지 확인하기 위해 긴 폴링 또는 서버에 대한 순차 호출 형식을 사용할 수 있습니다.

+0

사실, bayeux 프로토콜을 구현하여 일종의 이벤트를 수신 할 수 있습니다. 그것이 OP를 위해 그것의 가치가 있는지 확실하지 않은. –

+0

나는 폴링해야한다는 것을 알고있다. 기본적으로 내가 원하는 것은 이미지가 변경되었는지 여부를 폴링 할 수있는 가장 간단한 방법입니다. 즉, "내가 가지고있는 이미지가 수정 된 경우이 이미지를 다운로드하십시오"라는 http 요청을 보내는 것입니다. 그래서 자바 스크립트를 사용할 수 있습니다. 요청을 생성합니다. –

1

xhr.setRequestHeader() 메소드를 살펴보아야합니다. XMLHttpRequest 객체의 메소드이며 Ajax 쿼리에 헤더를 설정하는 데 사용할 수 있습니다. jQuery에서 쉽게 ajax 객체에 beforeSend 속성을 추가하고 거기에 일부 헤더를 설정할 수 있습니다.

즉, Ajax로 캐싱하는 것은 까다로울 수 있습니다. 브라우저 그룹의 캐싱 메커니즘을 무시하는 데 관련된 몇 가지 문제가 있으므로 Google 그룹스에서 this thread을 확인하고 싶을 수 있습니다. 이 기능을 사용하려면 서버가 적절한 캐시 제어 헤더를 반환하는지 확인해야합니다.

관련 문제