문제

매우 간단한 캐싱 의미론 : 매개 변수가 동일하고 (물론 URL이 동일하다면) 인기입니다. 그게 가능합니까? 추천?

도움이 되었습니까?

해결책

해당 RFC 2616 섹션 9.5 (post)에서 응답 적절한 헤더를 사용하는 경우 게시물 메시지에.

응답에 적절한 캐시 제어가 포함되거나 헤더 필드가 만료되지 않는 한,이 방법에 대한 응답은 캐시 할 수 없습니다. 그러나 303 (기타 참조) 응답을 사용하여 사용자 에이전트가 캐시 가능한 리소스를 검색하도록 지시 할 수 있습니다.

13 절에서 동일한 RFC 상태 (HTTP의 캐싱)에서 캐시가 게시물 후 해당 엔터티를 무효화해야한다는 것을 명시 적으로 설명합니다. 요구.

일부 HTTP 방법으로 인해 캐시가 엔티티를 무효화해야합니다. 이것은 요청 -URI에 의해 언급 된 엔티티 또는 위치 또는 콘텐츠 로베이션 헤더 (현재)에 의해 언급 된 엔티티입니다. 이러한 방법은 다음과 같습니다.

  - PUT
  - DELETE
  - POST

이러한 사양이 어떻게 의미있는 캐싱을 허용 할 수 있는지는 명확하지 않습니다.

다른 팁

RFC 2616 섹션 9.5에 따르면 :

"응답에 적절한 캐시 제어가 포함되거나 헤더 필드가 만료되지 않는 한 포스트 방법에 대한 응답은 캐시 할 수 없습니다."

예, 예, 사후 요청 응답을 캐시 할 수 있지만 적절한 헤더가있는 경우에만 캐시 할 수 있습니다. 대부분의 경우 응답을 캐시하고 싶지 않습니다. 그러나 어떤 경우에는 서버에 데이터를 저장하지 않는 경우와 같이 전적으로 적합합니다.

그러나 현재 Firefox 3.0.10을 포함한 많은 브라우저는 헤더에 관계없이 사후 응답을 캐시하지 않습니다. 즉, 이와 관련하여 더 현명하게 행동합니다.

이제 RFC 2616 S. 13.10에 관한 혼란을 해결하고 싶습니다. URI의 우편 메소드는 여기에 언급 한 것처럼 "캐싱에 대한 리소스를 무효화"하지 않습니다. 캐시 제어 헤더가 더 긴 기간의 신선도를 나타냅니다.

전반적인:

원래 Post는 Idempotent 작업이 아닙니다. 따라서 캐싱에 사용할 수 없습니다. get은 Idempotent 작업이어야하므로 일반적으로 캐싱에 사용됩니다.

9.1 절을 참조하십시오 HTTP 1.1 RFC 2616 S. 9.1.

Get Method의 의미론 외에 :

포스트 메소드 자체는 의미 적으로 무언가를 리소스에 게시하기위한 것입니다. 게시물을 한 번 vs vs vs vs 세 번하면 매번 서버의 리소스를 변경하기 때문에 게시물을 캐시 할 수 없습니다. 각 요청은 중요하며 서버로 전달해야합니다.

PUT 방법 자체는 의미 적으로 리소스를 넣거나 만들기위한 것입니다. 이는 empotent 작업이지만 그 동안 삭제가 발생할 수 있었기 때문에 캐싱에 사용되지 않습니다.

삭제 방법 자체는 의미 적으로 리소스를 삭제하기위한 것입니다. 그것은 empotent 작업이지만, 그 동안 풋이 발생할 수 있었기 때문에 캐싱에 사용되지 않습니다.

클라이언트 측 캐싱과 관련하여 :

웹 브라우저는 이전 게시물 작업의 응답이있는 경우에도 항상 귀하의 요청을 전달합니다. 예를 들어 며칠 간격으로 Gmail과 함께 이메일을 보낼 수 있습니다. 그것들은 동일한 주제와 신체 일 수 있지만 두 이메일을 모두 보내야합니다.

프록시 캐싱과 관련하여 :

메시지를 서버로 전달하는 프록시 HTTP 서버는 GET 또는 헤드 요청 외에는 아무것도 캐시하지 않습니다.

서버 캐싱과 관련하여 :

기본적으로 서버는 캐시를 확인하여 포스트 요청을 자동으로 처리하지 않습니다. 그러나 물론 사후 요청은 응용 프로그램 또는 추가 기능으로 전송 될 수 있으며 매개 변수가 동일 할 때 읽은 자신의 캐시를 가질 수 있습니다.

자원을 무효화 :

확인 HTTP 1.1 RFC 2616 S. 13.10 게시물이 캐싱의 자원을 무효화해야 함을 보여줍니다.

사후 응답을 캐시하는 경우 웹 응용 프로그램의 방향에 있어야합니다. 응답에 적절한 캐시 제어가 포함되거나 헤더 필드가 만료되지 않는 한이 방법에 대한 응답은 캐시 가능하지 않습니다. "

게시물의 결과가 Idempotent인지 아는 응용 프로그램이 필요하고 적절한 캐시 제어 헤더를 첨부할지 여부를 결정하는 응용 프로그램이 안전하게 가정 할 수 있습니다. 캐싱이 허용되는 헤더가 존재하는 경우, 응용 프로그램은 게시물이 실제로 슈퍼 get임을 알려줍니다. Post 사용은 불필요하고 관련이없고 (URI를 캐시 키로 사용하기 위해) IDEMPOTENT 작업을 수행하는 데 필요한 데이터가 필요합니다.

이 가정하에 캐시에서 다음 Get 's를 제공 할 수 있습니다.

캐시 가능 및 적절한 포스트 응답을 구별하기 위해 필요하고 올바른 헤더를 부착하지 못하는 응용 프로그램은 잘못된 캐싱 결과에 대한 잘못입니다.

즉, 캐시에 부딪히는 각 게시물에는 조건부 헤더를 사용하여 유효성 검사가 필요합니다. 이는 캐시 컨텐츠를 새로 고치기 위해서는 게시물의 결과가 객체의 수명이 만료 된 후까지 요청에 대한 응답에 반영되지 않도록하기 위해 필요합니다.

실제로 사이트에서 데이터를 변경하지 않는 경우 GET 요청이어야합니다. 양식이더라도 여전히 GET 요청으로 설정할 수 있습니다. 다른 사람들이 지적한 것처럼 게시물의 결과를 캐시 할 수는 있지만 정의 별 게시물이 데이터를 변경하기 때문에 의미 적 의미가 없습니다.

Mark Nottingham은 게시물의 응답을 캐시 할 수있을 때 분석했습니다. 캐싱을 활용하려는 후속 요청은 요청 또는 헤드 요청이어야합니다. 또한보십시오 httpbis

게시물은 식별 된 상태의 표현을 다루지 않습니다. 서버 가이 게시물 응답이 요청 URI와 동일한 컨텐츠로 위치 헤더를 설정하여 URI의 표현이라고 말하면서 벗어날 때. 이런 일이 발생하면 사후 응답은 동일한 URI에 대한 GET 응답과 같습니다. 캐시 및 재사용 할 수는 있지만 향후 GET 요청에만 해당됩니다.

https://www.mnot.net/blog/2012/09/24/caching_post.

물론 가능합니다. 서버로 전송 된 게시물 요청을 포착하고 나중에 다시 땀을 흘리기 위해 다시 전송 된 데이터를 캐시하려면 땀이 없습니다.

까다로운 부분은 "상태"에 관한 것입니다. 사용자에게 다시 보내려는 데이터가 실제로 동일해야합니까? 그의 쿠키가 변경되면 어떻게해야합니까?

사용자가 귀하의 홈페이지에 게시물 요청을 한 경우, 마지막으로 그렇게 한 이래로 다른 사용자가 그에게 메시지를 보냈습니다 (사이트 내부의 일부 시스템 사용)는이를 상태 변경으로 식별해야합니다. 다음 번에 홈페이지를로드 할 때 사용자에게 메시지에 대한 알림과 함께 새 버전의 홈페이지를 보내십시오. 게시물 매개 변수가 동일하더라도.

2014 년 5 월 19 일에 Firefox 27.0 및 HTTPFOX와 함께, 나는 이것의 한 줄을 보았습니다 : 00 : 03 : 58.777 0.488 657 (393) POST (CACHE) TEXT/HTML https://users.jackiszhp.info/s4up

분명히, 사후 방법의 응답은 캐시이며, 또한 HTTPS에도 있습니다. 믿을 수 없는!

게시물은 Stateful Ajax에서 사용됩니다. 게시물에 대한 캐시 된 응답을 반환하면 커뮤니케이션 채널과 메시지 수신의 부작용이 패배합니다. 이것은 매우 나쁘다. 추적하는 것은 또한 진정한 고통입니다. 적극 권장합니다.

사소한 예는 부작용으로 현재 주에 10,000 달러를 지불한다는 메시지가 될 것입니다. 당신은 "OK, 통과했습니다!"를 얻고 싶지 않습니다. 지난주 캐시 된 페이지. 다른, 더 복잡한 실제 사례는 비슷한 유쾌함을 초래합니다.

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