브라우저가 이미지를 새로 고치거나 다운로드하도록 강제하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1431512

문제

사용자가 이미지가 업로드되지 않았고 이전 이미지가 여전히 존재한다고보고하는 문제가 있습니다. 면밀히 검사 할 때 새로운 이미지가있는 것과 같은 이름과 동일한 이름을 가지고 있습니다. 업로드에서하는 일은 SEO 목적으로 이미지의 이름을 바꾸는 것입니다. 이미지를 삭제하면 이전 색인이 사용 가능 해지고 재사용됩니다. 따라서 이미지 이름이 동일합니다.

브라우저에 Cahce를 사용하지 말라고 지시하는 방법이 있습니까?

더 나은 대답은 이미지를 완전히 새로운 것으로 바꾸는 것입니다. 나는 그것에 대해 노력할 것이지만, 더 큰 문제를 해결하는 동안 그 동안 빠른 해결책입니다.

도움이 되었습니까?

해결책

임의의 고유 번호 (또는 시간 또는 버전 번호 등)로 쿼리 문자열을 추가하십시오.

<img src="image.png?80172489074" alt="a cool image" />

이로 인해 URL이 다른 새로운 요청이 발생합니다.

다른 팁

힘들어요. 당신은 정말로 이미지를 캐시하기를 원하지만 새로운 것을 사용할 수 있으면 캐시를 캐시하고 싶지 않습니다.

  • 과거의 날짜가있는 만료 헤더 사용은 캐싱을 방지합니다. 나쁜
  • "캐시 파열"매개 변수를 추가하면 문제가 해결 될 수 있지만 이미지가 캐시되는 것을 방지 할 수 있습니다. 나쁜.
  • 짧은 (1 시간이라고 가정하자)가 만료 된 헤더를 사용하는 것이 더 좋습니다 ... 한 시간 후에 사용자는 이미지를 볼 수 있지만 웹 서버는 매번 서비스를 제공 할 필요가 없습니다. 타협이지만 몇시에 효과가 있습니까? 실제로는 불가능합니다.

해결책? 두 가지 좋은 옵션을 생각할 수 있습니다.

  • 에타그와 사용 능력을 살펴보십시오. 이 상황은이 상황을 위해 설계되었습니다. 브라우저는 파일이 최신인지 여부를 서버에 명시 적으로 묻습니다. Aleady가 없다면 Apache에서 이것을 켜면 이걸 켜도됩니다.
  • 각각의 새 이미지에 대한 새 URL을 생성하고 (멀리 미래가 만료되는 헤더 사용). 이것이 당신이 작업하고있는 것입니다.

당신은 넣을 수 있습니다 http-equiv 안에 <meta> 브라우저가 캐시를 사용하지 말라고 지시하는 태그 (또는 더 나은 방법 - 정의 된 방식으로 사용). 그러나 적절한 HTTP를 보내도록 서버를 구성하는 것이 좋습니다. cache 헤더. 체크 아웃 캐싱에 관한 기사.

그럼에도 불구하고 일부 브라우저는 모든 것을 지원하지 않을 수 있습니다 http 표준이지만 나는 그것이가는 길이라고 생각합니다.

이미지 SRC에 현재 DateTime을 추가하십시오.

<img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />

HTTP 헤더를 사용하여 캐시 동작을 제어 할 수 있습니다.

과거에서 만료 헤더를 설정하면 브라우저가 캐시 된 버전을 사용하지 않도록합니다.

Expires: Sat, 26 Jul 1997 05:00:00 GMT

당신은 상담 할 수 있습니다 RFC 자세한 내용은.

브라우저와 서버간에 교환 된 데이터를 살펴보면 브라우저가 이미지에 대한 HTTP 헤드 요청을 보낼 것임을 알 수 있습니다. 결과에는 수정 시간이 포함되어 있지만 실제 이미지 데이터는 아닙니다). 서버에서 이미지가 변경되고 브라우저가 이미지를 다시 다운로드 해야하는 경우이 시간이 변경되어 있는지 확인하십시오.

PHP에서는이 트릭을 사용할 수 있습니다

<img src="image.png?<?php echo time(); ?>" />

time () 함수는 현재 타임 스탬프를 표시합니다. 모든 페이지로드는 다릅니다. 따라서이 코드는 브라우저를 속입니다. 다른 경로를 읽고 사용자가 마지막으로 사이트를 방문한 이후 이미지가 변경되었다고 생각합니다. 그리고 캐시를 사용하는 대신 다시 다운로드해야합니다.

무작위로 가십시오. 임의의 숫자를 사용하고 이미지 파일 이름으로 추가하십시오.

<img src="image.jpg?<?=rand(1,1000000)?>">

PHP에서는 임의의 숫자 또는 현재 타임 스탬프를 보낼 수 있습니다.

<img src="image.jpg?<?=Date('U')?>">

또는

<img src="image.jpg?<?=rand(1,32000)?>">

결과는 괜찮지 않았습니다. 이것이 올바른 프로그램을 프로그램하는 방법이라고 생각합니다.

 <td><?php echo "<img heigth=90 width=260 border=1 vspace=2 hspace=2 src=".$row['address']."?=".rand(1,999)."/>" ?></td>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top