source

추가 쿼리 문자열 매개 변수 또는 POST를 사용할 수 없는 경우 Internet Explorer 11에서 AJAX 캐시를 피하는 방법

manysource 2023. 2. 12. 18:09

추가 쿼리 문자열 매개 변수 또는 POST를 사용할 수 없는 경우 Internet Explorer 11에서 AJAX 캐시를 피하는 방법

저는 이 질문이 제기되었다는 것을 알고 있지만, 현대의 REST에서는 이 질문의 이전 반복이나 답변이 정확하거나 충분하지 않습니다.이 질문에 대한 명확한 답변이 필요하다.

문제는 잘 알려져 있습니다.IE(11개라도)는 AJAX 요구를 캐시합니다.이것은 정말 바보 같은 일입니다.다들 이해해요.

이해되지 않는 것은 이전의 답변 중 어느 것도 충분하지 않다는 것이다.SO에 관한 이 질문의 모든 이전 인스턴스는 다음 중 하나에 의해 충분한 답변으로 표시됩니다.

1) 각 요구에서 고유한 쿼리 문자열 파라미터(유닉스 타임스탬프 등)를 사용하여 각 요구 URL을 고유하게 하여 캐싱을 방지합니다.

-- 또는 --

2) GET 대신 POST를 사용합니다.IE는 특정 고유한 상황을 제외하고 POST 요구를 캐시하지 않습니다.

-- 또는 --

3) 서버에 의해 전달된 'cache-control' 헤더를 사용합니다.

현대의 REST API 연습과 관련된 많은 상황에서 IMO는 이러한 답변 중 어느 것도 충분하거나 실용적이지 않습니다.REST API는 POST 요구와 GET 요구에 대해 완전히 다른 핸들러를 가지며 동작도 완전히 다르기 때문에 일반적으로 POST는 GET의 적절하거나 올바른 대안이 아닙니다.또한 많은 API가 엄격한 검증을 하고 있으며, 많은 이유로 인해 예상치 못한 쿼리 문자열 파라미터를 입력했을 때 500 또는 400개의 오류가 발생합니다.마지막으로 서버 응답에 의해 제공되는 헤더를 제어할 수 없고 캐시 제어 헤더를 추가하는 것은 권한 밖의 서드파티제 또는 유연성이 없는 REST API와 인터페이스하는 경우가 많습니다.

자, 질문은 다음과 같습니다.

이 상황에서 클라이언트 측에서 I.E.가 AJAX GET 요청 결과를 캐싱하지 못하도록 할 수 있는 방법은 정말 없습니까?

캐싱은 일반적으로 서버에 의해 반환될 때 내용에 대한 헤더를 설정하여 제어됩니다.이미 그렇게 하고 있는데 IE가 이를 무시하고 캐슁하고 있다면 질문에서 언급한 캐시 버스트 기술 중 하나를 사용하는 방법밖에 없습니다.API의 경우 캐시 버스트 기술을 시도하기 전에 적절한 캐시 헤더를 사용하고 있는지 확인하는 것이 좋습니다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ

Cache-control: no-cache
Cache-control: no-store
Pragma: no-cache
Expires: 0

API를 제어하지 않을 경우 agax gets에 요청 헤더를 추가하여 IE 캐시를 비활성화할 수 있습니다.

'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0'

언급URL : https://stackoverflow.com/questions/32261000/how-to-avoid-ajax-caching-in-internet-explorer-11-when-additional-query-string-p