문제

ASPX 페이지가 있지만 모든 콘텐츠가 손으로 생성됩니다 (예, 핸들러를 만들어야한다는 것을 알고 있습니다. 다른 질문이 있습니다).

클라이언트 브라우저에서 출력을 캐시하고 싶습니다. 문제는 하나의 쿼리에 대해서만 캐시된다는 것입니다.

        public static void ProceedCaching(string etag, string lastModify, string response, HttpResponse Response,
                                      HttpRequest Request)
    {
        Response.AddHeader("ETag", "\"" + etag + "\"");
        Response.AddHeader("Last-Modified", lastModify);
        Response.AppendHeader("Cache-Control", "Public");
        Response.AppendHeader("Expires",
                              DateTime.Now.AddMinutes(1).ToUniversalTime().ToString("r",DateTimeFormatInfo.InvariantInfo));

        string ifModified = Request.Headers["If-Modified-Since"];

        if (!string.IsNullOrEmpty(ifModified))
        {
            if (ifModified.Contains(";"))
                ifModified = ifModified.Remove(ifModified.IndexOf(';'));
        }

        string incomingEtag = Request.Headers["If-None-Match"];

        if (String.Compare(incomingEtag, etag) == 0 || string.Compare(ifModified, lastModify) == 0)
        {
            Response.StatusCode = 304;
            Response.End();
        }

        Response.Write(response);
        Response.End();
    }

그것은 지저분 해지고 있습니다. 내가 말했듯이 그것은 한 번만 캐시되었습니다. recevieng http 304 브라우저는 캐싱 정보없이 깨끗한 요청을 보냅니다 (Etag, lastmodified). 아이디어가 있습니까?

도움이 되었습니까?

해결책

이 대답을 찾았습니다 여기

일반적으로 말하면, 이것들은 가장 일반적인 규칙입니다 (세부 사항을 이해하지 못하면 걱정하지 마십시오. 아래에 설명됩니다).

  1. 응답 헤더가 캐시에 보관하지 말라고 말하면 그렇지 않습니다.
  2. 요청이 인증되거나 안전한 경우 캐시되지 않습니다.
  3. 응답에 유효성 검사기 (ETAG 또는 최종 수정 된 헤더)가없고 명시 적 신선도 정보가 없으면 성취 할 수없는 것으로 간주됩니다.
  4. 캐시 된 표현은 신선한 것으로 간주됩니다 (즉, 원리 서버로 확인하지 않고 클라이언트에게 보낼 수 있음).
    • 만료 된 시간 또는 기타 연령 제어 헤더 세트가 있으며 여전히 새로운 기간 내에 있습니다.
    • 브라우저 캐시가 이미 표현을 보았고 세션을 한 번 확인하도록 설정된 경우.
    • 프록시 캐시가 최근에 표현을 보았고 비교적 오래 전에 수정 된 경우. 신선한 표현은 원점 서버로 확인하지 않고 캐시에서 직접 제공됩니다.
  5. 표현이 오래되면 Origin Server가 검증을 받거나 캐시에 보유한 사본이 여전히 양호한 지 알 수 있습니다.

그리고 마이크로 소프트 캐시를 원하지 않는다면 좋은 기사가 있습니다.

다른 팁

첫 번째 줄에서 ETAG 주위에 추가하는 인용문을 제거하면 코드 SNIPPET이 나에게 잘 작동합니다. 그러나 나는 그것이 스 니펫의 실수 일 뿐이며, 당신이 직면하고있는 실제 문제는 아닙니다.

Firefox 3 DOSNT는 처음 304를받은 후 서버를 치는 것을 귀찮게합니다. IE7은 계속 진행하지만 LastMod/Etag 헤더를 올바르게 보내고 매번 304를받습니다.

브라우저에서 캐싱 설정을 변경했기 때문이 아니십니까? 나는 다른 브라우저에서 시도해 보려고 노력할 것입니다.

약간 깨끗하게 만들려면 응답시 메소드를 사용할 수 있습니다. 헤더를 직접 설정하는 대신 캐싱을 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top