[http] Pragma와 Cache-Control 헤더의 차이점은 무엇입니까?

Wikipedia의 Pragma 헤더에 대해 읽었습니다 .

“Pragma : no-cache 헤더 필드는 요청에 사용하기위한 HTTP / 1.0 헤더입니다. 이는 브라우저가 서버가 아닌 새로운 버전의 리소스를 원한다고 서버와 모든 중간 캐시에 알리는 수단입니다. 일부 사용자 에이전트는 응답으로이 헤더에주의를 기울이지 만 HTTP / 1.1 RFC는 특히이 동작에 의존하지 않도록 경고합니다. “

그러나 나는 그것이 무엇을 이해하지 못했습니까? 사이의 차이는 무엇입니까 Cache-Control값 헤더 no-cachePragma그 값도는 no-cache?



답변

PragmaHTTP / 1.0 구현이며 cache-control동일한 개념의 HTTP / 1.1 구현입니다. 둘 다 클라이언트가 응답을 캐싱하지 못하도록하기위한 것입니다. 이전 클라이언트는 HTTP / 1.1을 지원하지 않을 수 있으므로 해당 헤더가 여전히 사용되고 있습니다.


답변

Pragma클라이언트의 요청에만 적용 가능한 것으로 정의 된 것을 제외하고 는 차이가 없지만 클라이언트 Cache-Control의 요청과 서버의 응답 모두에서 사용될 수 있습니다.

따라서 표준에 관한 한, 요청을하는 클라이언트와 서버가 클라이언트로부터 요청을받는 관점에서만 비교할 수 있습니다. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 정의하는 시나리오는 다음과 같습니다 :

HTTP / 1.1 캐시는 클라이언트가 “Cache-Control : no-cache”를 보낸 것처럼 “Pragma : no-cache”를 처리해야합니다. 새로운 Pragma 지시문은 HTTP에 정의되지 않습니다.

  Note: because the meaning of "Pragma: no-cache as a response
  header field is not actually specified, it does not provide a
  reliable replacement for "Cache-Control: no-cache" in a response

위의 내용을 읽는 방법 :

  • 클라이언트를 작성 중이고 필요한 경우 no-cache:

    • 서버가 지원 Pragma: no-cache하는지 알 수 없으므로 요청에 사용 하십시오 Cache-Control.
    • 그러나 답장에서 캐시할지 여부를 결정하려면 Cache-Control
  • 서버를 작성하는 경우 :

    • 클라이언트의 요청을 구문 분석 할 때 확인하십시오 Cache-Control. 찾을 수 없으면를 확인 Pragma: no-cache하고 Cache-Control: no-cache논리를 실행하십시오 .
    • 답글을 보내 Cache-Control주십시오.

물론 현실은 RFC에서 작성되거나 암시 된 것과 다를 수 있습니다!


답변

| Stop using          | Replaced with                    |
| (HTTP 1.0)          | (HTTP 1.1 - 1999)                |
|---------------------|----------------------------------|
| Expires: [date]     | Cache-Control: max-age=[seconds] |
| Pragma: no-cache    | Cache-Control: no-cache          |

1999 년 이후에도 여전히 Expires 또는 Pragma를 사용 하고 있다면 잘못하고 있습니다.

나는 당신을보고 있습니다.

200 OK
Pragma: no-cache
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
X-Request-Guid: a3433194-4a03-4206-91ea-6a40f9bfd824
Strict-Transport-Security: max-age=15552000
Content-Length: 54
Accept-Ranges: bytes
Date: Tue, 03 Apr 2018 19:03:12 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-yyz8333-YYZ
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1522782193.766958,VS0,VE30
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Cache-Control: private

tl; dr : Pragma은 HTTP / 1.0의 레거시이며 Internet Explorer 5 또는 Netscape 4.7 이후에는 필요하지 않았습니다. 일부 사용자가 IE5를 사용할 것으로 예상하지 않는 한 사용을 중지하는 것이 안전합니다.


  • 만료 : [date] (더 이상 사용되지 않음-HTTP 1.0)
  • Pragma : 캐시 없음 (더 이상 사용되지 않음-HTTP 1.0)
  • 캐시 제어 : max-age =[seconds]
  • 캐시 제어 : 캐시 없음 (매번 캐시 된 사본을 다시 확인해야 함)

그리고 조건부 요청 :

  • Etag (엔티티 태그) 기반 조건부 요청
    • 섬기는 사람: Etag: W/“1d2e7–1648e509289”
    • 고객: If-None-Match: W/“1d2e7–1648e509289”
    • 섬기는 사람: 304 Not Modified
  • 수정 된 날짜 기반 조건부 요청
    • 섬기는 사람: last-modified: Thu, 09 May 2019 19:15:47 GMT
    • 고객: If-Modified-Since: Fri, 13 Jul 2018 10:49:23 GMT
    • 섬기는 사람: 304 Not Modified

최종 수정 : 2019 년 5 월 09 일 목요일 19:15:47 GMT


답변