2014-01-29 4 views
0

이 질문의 작성자와 정확히 같은 문제가 있습니다 : Preventing iframe caching in browser - 내 iframe 내의 url이 캐시됩니다. 필자는 헤더에 잔인한 안티 캐싱 정책을 요청하고 Fiddler는 youtube 비디오 (iframe 내의 페이지)도 캐싱되지 않는다는 것을 보여 주며 iframe을 사용하여 페이지를 다시로드 할 때마다 URL이 동일하다는 것을 보여줍니다.JavaScript가없는 iframe에서 URL 캐싱 방지

다른 점은 무엇입니까? 링크 된 질문에 대한 몇 가지 대답은 iframe이 JavaScript로 동적으로 작성되었다고 가정합니다. 하지만 PHP로 동적으로 삽입되는 매개 변수가 거의없는 정적 HTML로 iframe을 만들었습니다. 자바 스크립트를 통해 전체 웹 사이트의이 기능을 간단히 만들 수는 있지만 해결 방법은 PHP/HTML을 사용하는 것이 좋습니다.

So : JavaScript가없는 iframe 내에서 URL 캐싱을 방지 할 수 있습니까? 그렇다면 어떻게?

편집 - 내 코드 :

$videoUrl = 'xL0NjTDgwY4'; 
    $x = rand(); 
    echo '<iframe id="player2" type="text/html" '; 
    echo 'src="http://www.youtube.com/embed/'.$videoUrl.'?enablejsapi=1&origin=http://e-history.cz&n="'.$x; 
    echo '></iframe>'; 

피들러는 보여줍니다

호스트 : www.youtube.com
URL : /embed/M7lc1UVf-VE?enablejsapi=1&origin=http://example.com
캐싱 : 노 캐시; 만료일 : Tue, 27 Apr 1971 19:44:06 EST
내 웹의 외부 페이지 캐싱 : no-store, no-cache, must-revalidate, post-check=0, pre-check=0; Expires: Thu, 19 Nov 1981 08:52:00 GMT

필요한 경우 다른 필드를 입력하십시오.

피들러에 의해 표시되는 URL 내가 일반 HTML에서 iframe이가 표시되는 링크에 YouTube Player API (두 번째 코드 블록에서 iframe이 템플릿을 복사 할 때 내가 처음이 있었다 URL입니다.

내 (htaccess로의) 캐시 관련 헤더 :

Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 

그리고 메타의 : 피들러에 표시된

<meta http-equiv="pragma" content="no-cache" /> 
    <meta http-equiv="cache-control" content="no-cache" /> 

만료 날짜가 심지어 주문 제안 더 많은 안티 캐싱 헤더 when I though I had a caching problem. 이론적으로 이러한 복제가 문제를 일으킬 가능성은 있지만 가능성은 희박합니다.

관련성있는 정보가 하나 더 있습니다. 내 웹 사이트에 다른 iframe이 있으며 정상적으로 작동하며 Google지도의 경우를 제외하고는 캐싱이 필요하지 않습니다. 이 작동하는 iframe 코드 :

if(isset($kml)) { 
    $adr = 'https://maps.google.com?q='.$kml.'&amp;ll='; 
    } else { 
    $adr = 'https://maps.google.com?ll='; 
    }  
    $adr .= $lat.','.$lon.'&amp;z='.$zoom; 
    $adr .= '&amp;t=h&amp;output=embed'; 
    echo '<iframe class="mapa" src="'.$adr.'"></iframe>'; 
+0

각로드시 URL 끝 부분에 임의로 get 문자열을 추가하여 브라우저가 다른 페이지로 생각하도록 속일 수 있습니다. – cmorrissey

+0

@ChristopherMorrissey :이 작업을 시도해 보았거나 완전히 다른 주소 (심지어는 다른 도메인)를 삽입하려고했습니다. Fiddler는 여전히 동일한 주소가 요청되었음을 보여줍니다. –

+0

코드를 표시하면 다른 사람이 약간 다르게 수행해야하는 내용을 보게됩니다. – TecBrat

답변

1

나는 당황하지만 행복합니다. 이제 작동합니다. iframe은 수요일 (내가 물었을 때) 어제 아침 붙어있었습니다. 그 다음 거의 하루 종일 댓글을 달았습니다. 오늘 (2014 년 1 월 31 일) 주석 처리를 취소하면 OK였습니다. 지금 URL을 자유롭게 전환 할 수 있습니다.

문제가 해결되었습니다. 나는 절대적으로 확신하지는 않지만, 그것이 Firefox bug 356558이라고 생각한다. 몇 년 동안 해결되지 않았기 때문에 쉬운 해결책이없는 것 같아서 캐시가 사라질 때까지 기다리는 것이 좋습니다.어쨌든, 지금은 어떤 대답도 받아들이지 않을 것입니다. JavaScript가 아닌 빠른 해결 방법이있을 수 있기 때문에 같은 문제를 가진 다른 사람들을 도울 수 있습니다.

+0

Firefox는 게시 된 질문의 태그입니다. 그러나이 문제는 다른 브라우저가 아닌 Firefox에서만 발생한다는 것을 알지 못했습니다. 그랬니? 문제는 Firefox 브라우저에서만 발생 했습니까? Chrome이나 IE와 같은 다른 브라우저에서는 발생하지 않았습니까? – JohnH

1

만료 헤더를 -1로 설정해보세요. 이렇게하면 브라우저 캐시를 무효화하여 서버에서 전송 된 페이지가 만료됩니다. 올바른 Pragma 캐시 헤더도 설정해야합니다.