복붙노트

[JQUERY] AJAX 호출 결과의 방지 브라우저 캐싱

JQUERY

AJAX 호출 결과의 방지 브라우저 캐싱

해결법


  1. 1.나는 새로운 날짜 ()를 사용하여 다음 getTime ()를, 같은 밀리 초 내에서 일어나는 여러 요청을하지 않는 한 충돌을 방지 할 수있다. :

    나는 새로운 날짜 ()를 사용하여 다음 getTime ()를, 같은 밀리 초 내에서 일어나는 여러 요청을하지 않는 한 충돌을 방지 할 수있다. :

    $.get('/getdata?_=' + new Date().getTime(), function(data) {
        console.log(data); 
    });
    

    편집 :이 답변은 몇 살입니다. 아직 (그래서 내가 그것을 삭제하지 않은 경우) 작동하지만 지금이 달성의 / 청소기 방법이 더있다. 내 취향이 방법입니다,하지만 당신은 페이지의 수명 기간 동안 모든 요청에 ​​대해 캐시를 사용하지 않도록 설정하려면이 대답은 유용합니다.


  2. 2.다음에 관계없이, 캐시되는 모든 미래 AJAX 요청을 방지 할 수있는 jQuery를 사용 방법 ($ 갔지, $ 아약스 등)

    다음에 관계없이, 캐시되는 모든 미래 AJAX 요청을 방지 할 수있는 jQuery를 사용 방법 ($ 갔지, $ 아약스 등)

    $.ajaxSetup({ cache: false });
    

  3. 3.JQuery와 $ 갔지 () 결과를 캐시합니다. 대신에

    JQuery와 $ 갔지 () 결과를 캐시합니다. 대신에

    $.get("myurl", myCallback)
    

    당신은 당신이 떨어져 캐싱을 설정 할 수 있습니다 $ 아약스를 사용한다 :

    $.ajax({url: "myurl", success: myCallback, cache: false});
    

  4. 4.또 다른 방법은 아약스 호출에 대한 응답을 생성하는 코드에 서버 측로부터 캐시 헤더를 제공하지하는 것입니다 :

    또 다른 방법은 아약스 호출에 대한 응답을 생성하는 코드에 서버 측로부터 캐시 헤더를 제공하지하는 것입니다 :

    response.setHeader( "Pragma", "no-cache" );
    response.setHeader( "Cache-Control", "no-cache" );
    response.setDateHeader( "Expires", 0 );
    

  5. 5.여기에 모든 해답은 서버의 액세스 로그에 표시됩니다 요청 된 URL에 발자국을 둡니다.

    여기에 모든 해답은 서버의 액세스 로그에 표시됩니다 요청 된 URL에 발자국을 둡니다.

    나는 어떤 부작용이있는 헤더 기반의 솔루션을 필요로하고 나는 그것이 모든 브라우저에서 웹 페이지 캐싱을 제어하는 ​​방법에 언급 된 헤더를 설정하여 달성 할 수 발견?

    그 결과, 적어도 크롬을위한 작업이 될 것입니다 :

    {(아약스 $ URL : URL, 헤더 : { '캐시 제어': '노 캐시, 아니 매장, 반드시 재 검증' '에서 Pragma': '노 캐시' '만료': '0' } });


  6. 6.개인적으로 나는 쿼리 문자열 방법은 서버에 설정 헤더 것보다 더 신뢰할 수 있다고 생각 - 프록시 또는 브라우저 단지 (- 어떤 이름을 명명하지 일부 브라우저는 다른 사람보다 더 나쁘다) 어쨌든 캐시하지 않는다는 보장이 없다.

    개인적으로 나는 쿼리 문자열 방법은 서버에 설정 헤더 것보다 더 신뢰할 수 있다고 생각 - 프록시 또는 브라우저 단지 (- 어떤 이름을 명명하지 일부 브라우저는 다른 사람보다 더 나쁘다) 어쨌든 캐시하지 않는다는 보장이 없다.

    나는 보통 인 Math.random ()를 사용하지만 날짜를 (당신이 두 번 같은 값을 얻을만큼 빠르게 AJAX 요청을 수행해서는 안)을 사용하여 아무것도 잘못 표시되지 않습니다.


  7. 7.설명서를 따라 : http://api.jquery.com/jquery.ajax/

    설명서를 따라 : http://api.jquery.com/jquery.ajax/

    당신과 함께 캐시 속성을 사용할 수 있습니다 :

    $.ajax({
        method: "GET",
        url: "/Home/AddProduct?",
        data: { param1: value1, param2: value2},
        cache: false,
        success: function (result) {
            // TODO
        }
    });
    

  8. 8.물론 "캐시 파괴"기술은 일을 얻을 것이다,하지만 서버 응답을 캐시되어서는 안된다는 클라이언트에 표시된 경우이 처음부터 발생하지 않을 것입니다. 어떤 경우에는 캐시 응답, 몇 번되지에게 유리하다. 서버가 데이터의 정확한 수명을 결정하자. 당신은 나중에 변경할 수 있습니다. 훨씬 쉽게 UI 코드의 많은 다른 장소에서보다 서버에서해야 할 일.

    물론 "캐시 파괴"기술은 일을 얻을 것이다,하지만 서버 응답을 캐시되어서는 안된다는 클라이언트에 표시된 경우이 처음부터 발생하지 않을 것입니다. 어떤 경우에는 캐시 응답, 몇 번되지에게 유리하다. 서버가 데이터의 정확한 수명을 결정하자. 당신은 나중에 변경할 수 있습니다. 훨씬 쉽게 UI 코드의 많은 다른 장소에서보다 서버에서해야 할 일.

    서버 통제 할 수없는 경우 중은 물론 이것은 도움이되지 않습니다.


  9. 9.이 캐시되지해야하는 이유 진짜 문제입니다. 이 모든 시간을 변경하기 때문에 캐싱하지 않아야 할 경우, 서버는 자원을 캐시하지 않도록 지정해야합니다. 그냥 가끔 변경하는 경우 (때문에 할 수있는 변화에 따라 자원 중 하나), 클라이언트 코드가 그것에 대해 알 수있는 방법이 있다면, 그것은 어떤 해시 또는 마지막으로 수정 한 날짜로부터 계산 된 URL에 더미 매개 변수를 추가 할 수 있습니다 이러한 자원의 (그들이 영원히 캐시 할 수 있지만,이 나타나는 새 버전은 아직 제공 할 수 있도록 우리는 마이크로 소프트 아약스 스크립트 자원에 무엇이의). 클라이언트가 변경 알 수없는 경우, 올바른 방법이 제대로 핸들 HEAD 요청에 대한 서버의 수와 캐시 된 버전을 사용할지 여부를 클라이언트에게해야한다. 임의의 매개 변수를 추가 또는 캐시 캐시 가능성이 서버 자원의 속성이기 때문에 잘못 없다, 그래서 서버 측을 결정해야한다 결코 클라이언트에서 말하는 것처럼 나에게 보인다. 자신을 물어 또 다른 질문이 자원 정말 GET을 통해 제공한다 또는이 POST를 통과해야합니까? 즉 의미의 문제이지만, 그것은 또한 (공격 작업은 서버가 GET을 허용하는 경우에만 것이있다) 보안 문제가 있습니다. POST는 캐시되지 않습니다.

    이 캐시되지해야하는 이유 진짜 문제입니다. 이 모든 시간을 변경하기 때문에 캐싱하지 않아야 할 경우, 서버는 자원을 캐시하지 않도록 지정해야합니다. 그냥 가끔 변경하는 경우 (때문에 할 수있는 변화에 따라 자원 중 하나), 클라이언트 코드가 그것에 대해 알 수있는 방법이 있다면, 그것은 어떤 해시 또는 마지막으로 수정 한 날짜로부터 계산 된 URL에 더미 매개 변수를 추가 할 수 있습니다 이러한 자원의 (그들이 영원히 캐시 할 수 있지만,이 나타나는 새 버전은 아직 제공 할 수 있도록 우리는 마이크로 소프트 아약스 스크립트 자원에 무엇이의). 클라이언트가 변경 알 수없는 경우, 올바른 방법이 제대로 핸들 HEAD 요청에 대한 서버의 수와 캐시 된 버전을 사용할지 여부를 클라이언트에게해야한다. 임의의 매개 변수를 추가 또는 캐시 캐시 가능성이 서버 자원의 속성이기 때문에 잘못 없다, 그래서 서버 측을 결정해야한다 결코 클라이언트에서 말하는 것처럼 나에게 보인다. 자신을 물어 또 다른 질문이 자원 정말 GET을 통해 제공한다 또는이 POST를 통과해야합니까? 즉 의미의 문제이지만, 그것은 또한 (공격 작업은 서버가 GET을 허용하는 경우에만 것이있다) 보안 문제가 있습니다. POST는 캐시되지 않습니다.


  10. 10.무엇 GET 대신 POST 요청을 사용하는 방법에 대해 ...? (어떤 어쨌든해야 ...)

    무엇 GET 대신 POST 요청을 사용하는 방법에 대해 ...? (어떤 어쨌든해야 ...)


  11. 11.(당신이 보이는 jQuery를 사용하는 경우) 아마 당신은 대신에 $ 아약스 ()를 보라. http://docs.jquery.com/Ajax/jQuery.ajax#options 및 옵션 "캐시"를 살펴 보자.

    (당신이 보이는 jQuery를 사용하는 경우) 아마 당신은 대신에 $ 아약스 ()를 보라. http://docs.jquery.com/Ajax/jQuery.ajax#options 및 옵션 "캐시"를 살펴 보자.

    또 다른 방법은 서버 측에서 일을 캐시하는 방법을 살펴하는 것입니다.


  12. 12.모바일 사파리에 $ .ajaxSetup ()의 캐시 옵션을 사용하여 당신의 그들을 위해, 모바일 사파리도 그 캐시 때문에 당신이 게시물에 대한 타임 스탬프를 사용 할 수 있습니다 것으로 보인다. (당신이 $ .ajaxSetup ()에서로 이동하는) $ 아약스 ()에 대한 설명서에 따르면 :

    모바일 사파리에 $ .ajaxSetup ()의 캐시 옵션을 사용하여 당신의 그들을 위해, 모바일 사파리도 그 캐시 때문에 당신이 게시물에 대한 타임 스탬프를 사용 할 수 있습니다 것으로 보인다. (당신이 $ .ajaxSetup ()에서로 이동하는) $ 아약스 ()에 대한 설명서에 따르면 :

    제가 위에서 언급 한 경우에 도움이되지 않습니다 혼자 옵션을 설정 그래서.


  13. 13.주어진 훌륭한 답변에 작은 추가 : 당신은 자바 스크립트없이 사용자를위한 비 아약스 백업 솔루션을 실행하는 경우, 당신은 그 서버 측 헤더 어쨌든 수정 얻을해야합니다. 나는 그것을 포기하는 사람들을 이해하지만 이것은 불가능하지 않다)

    주어진 훌륭한 답변에 작은 추가 : 당신은 자바 스크립트없이 사용자를위한 비 아약스 백업 솔루션을 실행하는 경우, 당신은 그 서버 측 헤더 어쨌든 수정 얻을해야합니다. 나는 그것을 포기하는 사람들을 이해하지만 이것은 불가능하지 않다)

    나는 당신에게 적합한 헤더의 전체 세트를 제공합니다 SO에 대한 또 다른 질문이있을거야. 나는 완전히 conviced miceus는 커버 모든 기반 100 % 응답하고 있지 않다.


  14. 14.기본적으로 만 캐시를 추가 : 거짓; 아약스에서 당신은있는 콘텐츠가 진행 이동으로 변경됩니다 생각하는 곳. 그리고 u는이 장소 생략 할 수있는 내용 습관의 변화가. 이러한 방법으로 유 때마다 새로운 응답을 얻을 것이다

    기본적으로 만 캐시를 추가 : 거짓; 아약스에서 당신은있는 콘텐츠가 진행 이동으로 변경됩니다 생각하는 곳. 그리고 u는이 장소 생략 할 수있는 내용 습관의 변화가. 이러한 방법으로 유 때마다 새로운 응답을 얻을 것이다


  15. 15.인터넷 익스플로러 (Internet Explorer) 아약스 캐싱 : 당신이 그것에 대해 위해 무엇을 어떤 건가요? 세 가지 방법을 제안합니다 :

    인터넷 익스플로러 (Internet Explorer) 아약스 캐싱 : 당신이 그것에 대해 위해 무엇을 어떤 건가요? 세 가지 방법을 제안합니다 :


  16. 16.@Athasach가 jQuery를 워드 프로세서에 따르면, 말했듯이, $ .ajaxSetup ({캐시 : 거짓}) GET 및 HEAD 요청 이외위한하지 않습니다 작동합니다.

    @Athasach가 jQuery를 워드 프로세서에 따르면, 말했듯이, $ .ajaxSetup ({캐시 : 거짓}) GET 및 HEAD 요청 이외위한하지 않습니다 작동합니다.

    당신은 더 나은 캐시 - 컨트롤을 다시 전송 꺼져 : 어쨌든 서버에서 노 캐시 헤더. 그것은 문제의 깨끗한 분리를 제공합니다.

    물론,이 프로젝트에 속하지 않는 것을 서비스 URL에 대해 작동하지 않을 것입니다. 이 경우에는 클라이언트 코드에서 호출하는 대신 서버 코드에서 타사 서비스를 프록시 고려할 수 있습니다.


  17. 17.이제, 그냥 다음과 같이 귀하의 아약스 요청에 캐시 옵션을 활성화 / 비활성화 설정을 통하여 그것을 쉽게

    이제, 그냥 다음과 같이 귀하의 아약스 요청에 캐시 옵션을 활성화 / 비활성화 설정을 통하여 그것을 쉽게

    $(function () {
        var url = 'your url goes here';
        $('#ajaxButton').click(function (e) {
            $.ajax({
                url: url,
                data: {
                    test: 'value'
                },
                    cache: true, //cache enabled, false to reverse
                    complete: doSomething
                });
            });
        });
        //ToDo after ajax call finishes
        function doSomething(data) {
            console.log(data);
        }
    });
    

  18. 18.당신이 ASP MVC를 NET을 사용하는 경우, 엔드 포인트 기능에 대한 다음과 같은 속성을 추가하여 컨트롤러 액션의 캐싱을 사용하지 않도록 :

    당신이 ASP MVC를 NET을 사용하는 경우, 엔드 포인트 기능에 대한 다음과 같은 속성을 추가하여 컨트롤러 액션의 캐싱을 사용하지 않도록 :

    [OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
    

  19. 19.당신이 IE 9를 사용하는 경우, 당신은 컨트롤러 클래스 정의 앞에 다음을 사용합니다 :

    당신이 IE 9를 사용하는 경우, 당신은 컨트롤러 클래스 정의 앞에 다음을 사용합니다 :

    [OutputCache를가 (NoStore 해당 = 시간 = 0, VaryByParam 특성 = "*")]

    공용 클래스 TestController : 컨트롤러

    이 캐싱에서 브라우저를 방지 할 수 있습니다.

    이 링크에 대한 자세한 내용 : http://dougwilsonsa.wordpress.com/2011/04/29/disabling-ie9-ajax-response-caching-asp-net-mvc-3-jquery/

    사실이 내 문제를 해결했다.


  20. 20.추가 헤더

    추가 헤더

    headers: {
                    'Cache-Control':'no-cache'
                }
    

  21. 21.요청 URL에 인 Math.random ()를 추가

    요청 URL에 인 Math.random ()를 추가

  22. from https://stackoverflow.com/questions/367786/prevent-browser-caching-of-ajax-call-result by cc-by-sa and MIT license