본문 바로가기

[Java] 언어별 no-cache 리스트

java by 낼스 2014. 5. 7.


HTML
<META http-equiv=""Expires"" content=""-1"">
<META http-equiv=""Pragma"" content=""no-cache"">
<META http-equiv=""Cache-Control"" content=""No-Cache"">

ASP
<%
Response.Expires = 0
Response.AddHeader ""Pragma"",""no-cache""
Response.AddHeader ""Cache-Control"",""no-cache,must-revalidate""
%>


JSP
<%
response.setHeader(""Cache-Control"",""no-store"");
response.setHeader(""Pragma"",""no-cache"");
response.setDateHeader(""Expires"",0);
if (request.getProtocol().equals(""HTTP/1.1""))
        response.setHeader(""Cache-Control"", ""no-cache"");
%>


PHP
<?
header(""Pragma: no-cache"");
header(""Cache-Control: no-cache,must-revalidate"");
?>


WML
<wml>
<head>
<meta http-equiv=""Cache-Control"" content=""max-age=no-cache"" forua=""true""/>
<meta http-equiv=""Cache-Control"" content=""must-revalidate"" forua=""true""/>
</head>
<card>
..
..
</card>
</wml>


JSP의 사용예
<%@ page contentType=""text/vnd.wap.wml""%>
<%
response.setHeader(""cache-control"",""no-store""); // http 1.1
response.setHeader(""Pragma"",""no-cache""); // http 1.0
response.setDateHeader(""Expires"",0); // proxy server 에 cache방지.
%>

<?xml version=""1.0"" encoding=""ks_c_5601-1987""?>
<!DOCTYPE wml PUBLIC ""-//WAPFORUM//DTD WML 1.1//EN""
""http://www.wapforum.org/DTD/wml_1.1.xml"">

<wml>
<card>
<p>
테스트
</p>
</card>
</wml>







페이지 만료,캐쉬설정 Expires Pragma Cache-Control no-cache





만료 및 Expires 헤더

만료일을 지정하는 헤더



Cache-Control 헤더

IE는 HTTP 1.1 Cache-Control 헤더를 지원한다



Pragma:no-cache 헤더

레거시 HTTP 1.0 서버는 Cache-Control 헤더를 사용할 수 없다. 이전 버전과 HTTP 1.0 서버와의 호환을 위해 Internet Explorer는 HTTP Pragma:no-cache 헤더의 특수한 사용을 지원한다



웹서버의 설정 또는 기타 각 프로그램에서 코딩으로도 제어 할 수 있다.



[IIS]



[HTML예제]

<HEAD>

<META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache"">

<META HTTP-EQUIV=""Expires"" CONTENT=""-1"">

<meta http-equiv=""expires"" content=""wed, 04 jul 1973 16:00:00 gmt"">

</HEAD>



[ASP예제]

<%

Response.Expires = 0

Response.Expiresabsolute = Now() - 1

Response.AddHeader ""pragma"",""no-cache""

Response.AddHeader ""cache-control"",""private""

Response.CacheControl = ""no-cache""

%>



HTTP RFC문서

  Hypertext Transfer Protocol -- HTTP/1.1 (RFC2068)



캐쉬테스트

  http://www.procata.com/cachetest/

Links:

  HTTP 1.1 caching specification
  Caching Tutorial for Web Authors and Webmasters
  Check the cacheability of a specific page



기타 유용한 메타태그 정리

  http://www.i18nguy.com/markup/metatags.html






[ASP] 페이지 캐싱 금지 방법




변화된 페이지의 결과가 아닌 캐싱된 페이지가 계속해서 노출될 경우 ASP페이지의 경우 아래와 같은 스크립트를 넣어 캐싱을 막을 수 있고 익스플로러 사용자의 경우 자신의 컴퓨터에 저장된 캐싱정보를 읽는것이 아니라 서버로부터 새롭게 변경된 정보를 가져오려면 ""Ctrl + 새로고침""을 눌러 캐싱을 막을 수 있다.
Microsoft Internet Information Server(IIS)를 사용하면 특정 Active Server Page(ASP) 페이지의 시작 부분에 다음 스크립트를 사용하여 휘발성 페이지나 제한적인 페이지를 쉽게 표시할 수 있다.

    * <%
    * Response.Expires = 0
    * Response.Expiresabsolute = Now() - 1
    * Response.AddHeader ""pragma"",""no-cache""
    * Response.AddHeader ""cache-control"",""private""
    * Response.CacheControl = ""no-cache""
    * %>

만료 및 Expires 헤더
모든 웹 서버는 모든 웹 페이지의 만료 구성을 사용하는 것이 좋다. 웹 서버가 요청 클라이언트에 반환되는 모든 리소스에 대해 HTTP Expires 응답 헤더를 통해 만료 정보를 제공하지 않는 것은 좋지 않은 구성이다. 대부분의 브라우저와 중간 프록시는 현재 이 만료 정보를 고려하고 이 정보를 이용하여 네트워크 상의 통신 효율을 향상시킨다.
Expires 헤더는 항상 서버의 특정 파일을 클라이언트가 업데이트해야 할 시간을 지정하는 데 사용된다. 페이지가 정기적으로 업데이트될 때 다음 업데이트 기간이 가장 효율적인 응답이다. 인터넷에서 매일 새벽 5시에 업데이트되는 일간 뉴스 페이지를 예로 들어 보자. 이 뉴스 페이지의 웹 서버는 다음날 새벽 5시 값으로 Expires 헤더를 반환해야 한다. 이 값이 반환되면 브라우저는 페이지가 실제로 변경될 때까지 웹 서버에 다시 연결할 필요가 없다.
변경될 것 같지 않은 페이지에는 대략 1년의 만료 날짜가 표시된다.
많은 경우에, 웹 서버는 서버에 바로 변경될 정보가 들어 있는 휘발성 페이지를 하나 이상 가지고 있다. 이 페이지는 Expires 헤더에 대해 서버에서 값 ""-1""로 표시한다. 사용자가 이후에 요청하면 Internet Explorer는 대개 조건부 If-Modified-Since 요청을 통해 해당 페이지를 업데이트하기 위해 웹 서버에 연결한다. 그러나, 해당 페이지는 디스크 캐시(""임시 인터넷 파일"")에 남아 있고, 뒤로와 앞으로 단추로 열어본 페이지 목록을 액세스할 경우 또는 브라우저가 오프라인 모드에 있을 경우에 원격 웹 서버에 연결하지 않고 적절한 상황에서 사용된다.
Cache-Control 헤더
그러나 어떤 페이지는 휘발성이거나 제한적이어서 디스크 캐싱이 필요없다. 이를 위해 Internet Explorer는 HTTP 1.1 Cache-Control 헤더를 지원한다. 이것은 HTTP 1.1 서버가 캐시값을 지정하지 않았을 경우 특정 웹 리소스의 모든 캐싱을 방지한다.
브라우저가 웹 서버에 다시 연결할 수 있을 때까지 캐시에 없는 페이지는 액세스할 수 없기 때문에 서버는 Cache-Control 헤더를 절약하여 사용해야 한다. 대부분의 경우에 ""Expires: -1""을 사용하는 것이 좋다.
Pragma: No-Cache 헤더
불행히도, 레거시 HTTP 1.0 서버는 Cache-Control 헤더를 사용할 수 없다. 이전 버전과 HTTP 1.0 서버와의 호환을 위해 Internet Explorer는 HTTP Pragma: no-cache 헤더의 특수한 사용을 지원한다. 클라이언트가 보안 연결(https://)을 통해 서버와 통신하고 서버가 응답과 함께 Pragma: no-cache 헤더를 반환하면 Internet Explorer는 응답을 캐시하지 않는다.
그러나, Pragma: no-cache 헤더는 이를 위해 만들어진 것은 아니다. HTTP 1.0과 1.1 사양에 따라 이 헤더는 응답이 아니라 요청 컨텍스트에서만 정의되고 실제로 프록시 서버에 맞게 만들어져 몇몇 중요한 요청이 대상 웹 서버에 도달하지 못하도록 할 수 있다. 이후의 응용 프로그램에서는 Cache-Control 헤더가 캐싱을 제어하는 적절한 수단이 될 것이다.
HTTP-EQUIV META 태그
HTML 페이지는 HTML 문서에서 특정 HTTP 헤더를 지정하는 META 태그의 특수한 HTTP-EQUIV 폼을 허용한다. 다음은 두 가지 Pragma: no-cache와 Expires: -1을 사용하는 간단한 HTML 페이지 예이다.

    * <HTML><HEAD>
    * <META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache"">
    * <META HTTP-EQUIV=""Expires"" CONTENT=""-1"">
    * </HEAD>
    * <BODY>
    * </BODY>
    * </HTML>

Pragma: no-cache는 보안 연결을 통해 사용될 때만 캐싱을 방지한다. Pragma: no-cache META 태그는 비 보안 페이지에서 사용될 경우 Expires: -1과 동일하게 처리된다. 페이지는 캐싱되지만 즉시 만료되는 것으로 표시된다.
Cache-Control META HTTP-EQUIV 태그는 무시되고 Internet Explorer 버전 4 또는 5에서 아무 효과가 없다. Cache-Control을 사용하려면 이 헤더가 위의 Cache-Control 섹션에 설명된 HTTP 헤더를 사용하여 지정되어야 한다.
표준 HTTP 헤더가 META 태그보다 더 많이 사용된다. META 태그는 일반적으로 HTML HEAD 섹션의 맨 위에 나타나야 한다. 그리고 Pragma HTTP-EQUIV META 태그에는 알려진 문제점이 적어도 하나 있다.
Cache-Control 헤더가 비 ASP 페이지에서 사용될 경우에는 서버 구성의 옵션을 사용하여 이 헤더를 추가해야 할 필요가 있다. IIS 4에서는 다음과 같이 수행한다.

    * 인터넷 서비스 관리자를 불러온다.
    * 컴퓨터와 서비스 트리를 사용하여 기본 웹 서버(또는 문제의 웹 서버)를 열고 Cache-Control 헤더가 필요한 컨텐트가 들어 있는 디렉터리를 찾는다.
    * 해당 디렉터리의 등록 정보 대화 상자를 가져온다.
    * HTTP 헤더 탭을 선택한다.
    * 사용자 지정 HTTP 헤더 그룹에서 추가 단추를 누르고 헤더 이름으로 ""Cache-Control""을, 헤더 값으로 ""no-cache""를 추가한다.

웹 서버 전체적으로 이 헤더를 사용하는 것은 좋지 않다. 클라이언트에서 절대로 캐싱되지 않아야 하는 컨텐트로만 사용을 제한한다. 위의 방법들을 지정했는데도 여전히 Internet Explorer와 캐싱에 문제가 있을 때는 다음의 방법을 시도해 본다.

    * ASP ""Response.CacheControl"" 속성과 함께 또는 반환된 HTTP 헤더를 통해 Cache-Control 헤더를 사용하는가? 이것은 Internet Explorer에서 캐싱을 방지하는 최적의 방법이다.
    * Internet Explorer 4.01 서비스 팩 2 이상을 사용하고 있는가? 이전 버전의 브라우저에서 캐싱을 완전히 방지하는 방법은 없다.
    * 웹 서버에 HTTP 1.1이 설정되어 있고 Internet Explorer에 HTTP 1.1 응답을 반환 중인지 재차 확인했는가? Cache-Control 헤더는 HTTP 1.0 응답에 적합하지 않다.
    * 서버쪽에서 CGI/ISAPI/Servlets를 사용할 경우 특히 HTTP 헤더의 CRLF 종결에 대해 정확하게 HTTP 1.1 사양을 따르는가? 성능 면에서 Internet Explorer는 대개 HTTP 1.1 사양을 위반하는 응답은 방지한다. 이 결과 대개 무시된 헤더 또는 예상치못한 서버 오류 보고서가 만들어진다.
    * HTTP 헤더의 철자가 정확한가? 당연 철자가 잘못되었다면 효과를 얻지 못할 것이다.


댓글