질문/조언질답게시판
Extra Form
PHP 사용안함
CMS 사용안함

 

제가 특정 대상인에게 캐시없이 새로고침이 필요해서 자바스크립트로 

 

location.reload(true);

 

를 사용해서 캐시 무시하고 서버에서 새로 가져오게 해 놓았는데요.

크롬의 특정 버전 이후 부터는 이게 false 로 되는 캐시된 것을 가져오는 일반 새로고침으로 동작하더군요.

 

이게 크롬에서 놓치고 있는 버그인가요? 아니면 이유를 가지고 막아 놓은건지 궁금하네요.

 

 

  • profile
    https://www.chromestatus.com/feature/5724282256621568

    이런게 검색이 되긴 했는데 뭐라 하는지 정확히 이해는 안가네요.
  • profile profile
    But from the m57, this behavior is changed to revalidate only the main resource, and to follow cache policy protocols for subresources.

    크롬 57버전 전까지는 location.reload(true) 사용시 해당 페이지의 모든 리소스 캐시(즉 해당 페이지에서 불러오는 CSS/JS 파일)의 캐시까지 모두 비웠으나 57버전부터는 무조건 해당 페이지 자체의 캐시만 비워진다는 뜻입니다. 즉 캐시를 비우게 하려면 서버에서 캐시를 무효화하는 적절한 헤더를 전송해야 합니다.
    (Expires 헤더 시간을 과거로 지정하거나, Cache-Control 헤더를 no-cache, no-store, must-revalidate로 지정해 캐싱을 강제로 끄는 등)
  • profile profile

    이게 해당 페이지에 meta 소스로 (Expires 헤더 시간을 과거로 지정하거나, Cache-Control 헤더를 no-cache, no-store, must-revalidate로 지정해 캐싱을 강제로 끄는 등)

     



    를 넣어봤는데 새로고침 시 파일 들을 새로 가져오지 않더군요. 제가 잘못 테스트한 건지는 모르겠습니다.

     

    저 스크립트가 제공되는 사용자에게 애드온에서

    Context::addHtmlHeader('<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />');
    Context::addHtmlHeader('<meta http-equiv="Pragma" content="no-cache" />');
    Context::addHtmlHeader('<meta http-equiv="Expires" content="0" />');

     

    이렇게 해봤었습니다.

  • profile profile

    if (!in_array(Context::get('act'), array('dispBoardDelete'))) {
    Context::addHtmlHeader('<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />');
    Context::addHtmlHeader('<meta http-equiv="Pragma" content="no-cache" />');
    Context::addHtmlHeader('<meta http-equiv="Expires" content="0" />');
    Context::addJsFile('./addons/name/js/reload.js', true, '', -10000, 'body');}
    }



    js 파일

    if (self.name != 'reload') {
    alert("본문에 서버에서 지워진 이미지 소스가 있습니다. 글 수정해서 정리해주세요. 글 수정창 혹은 본문에서 잠시 보이는 이미지는 브라우저에 임시로 캐시된 이미지입니다.");
    self.name = 'reload';
    self.location.reload(true);
    }
    else self.name = '';


    이렇게 했는데 안됩니다.

     

    -- 아참, 저 코드가 동작되는 조건이 before_display_content 로 되어 있습니다.

    물론 다른 브라우저(ff,ie)는 그냥 됩니다.

  • profile profile

    아마 meta태그로 지정해도 문서내 파일의 캐시까지 실제로 초기화하진 않는것 같습니다.
    아무래도 캐시가 사라지는 경우를 최소화해서 브라우저 불러오는 속도를 늘리려 한게 아닐까 싶습니다.

  • profile profile
    크롬에서만 location.reload() force reload 선택요소 true를 무시해버려 요상한 상황입니다. 개발자도구 콘솔에 javascript:location.reload(true) 직접 해봐도 동일 하더군요.

    클라이언트 사용자에게 ctl f5를 요청해야 하는 이상한 상황입니다.

서버에 요청 중입니다. 잠시만 기다려 주십시오...