[http] if-modified-since 대 if-none-match

if-modified-since와 if-none-match의 차이점은 무엇입니까? 파일에는 if-none-match가 사용되는 반면 페이지에는 if-modified-since가 사용된다는 느낌이 있습니까?



답변

차이점에 대해서 Last-Modified/If-Modified-SinceETag/If-None-Match:

둘 다 서로 바꿔서 사용할 수 있습니다. 그러나 리소스의 유형과 서버에서 생성되는 방법에 따라 하나 또는 다른 질문 ( “… 이후 수정 되었습니까?”/ “이 ETag와 여전히 일치합니까?”)이 더 쉽게 대답 할 수 있습니다. .

예 :

  • 파일을 제공하는 경우 파일을 날짜 mtime로 사용하는 Last-Modified것이 가장 간단한 해결책입니다.
  • 여러 SQL 쿼리로 만든 동적 웹 페이지를 제공하는 경우 이러한 쿼리에서 반환 된 데이터가 변경되었는지 여부를 확인하는 것은 비현실적 일 수 있습니다 (모든 쿼리에 일종의 “마지막 수정”열이있는 경우 제외). 이 경우, 예를 들어 페이지 콘텐츠의 md5 해시를 사용하는 ETag것이 훨씬 쉬울 것입니다.
    OTOH, 이것은 조건부 GET의 경우에도 서버에서 전체 페이지를 생성해야 함을 의미합니다. ETag에 정확히 무엇이 들어가야하는지 (기본 키, 개정 번호 등) 파악하면 여기에서 많은 시간을 절약 할 수 있습니다.

주제에 대한 자세한 내용은 다음 링크를 참조하십시오.


답변

If-Modified-Since와 비교되는 Last-Modified반면 If-None-Match에 비교됩니다 ETag. Modified-Since및 둘 다 ETag리소스의 특정 변형을 식별하는 데 사용할 수 있습니다.

그러나 If-Modified-Sinceto를 비교 Last-Modified하면 캐시 된 변형이 이전 또는 최신 인지 여부에 대한 정보 를 제공 하는 반면 If-None-Matchto 비교는 ETag둘 다 동일한 지 여부에 대한 정보를 제공합니다 . 또한 대부분의ETag 생성기는 시스템 특정 inode 의 정보를 포함 하므로 파일을 다른 드라이브로 이동하면 변경 될 수도 있습니다 ETag.


답변

Last-Modified / If-Modified-Since에서 사용되는 타임 스탬프 값은 정밀도가 제한되어 있습니다 (1 초). 예를 들어 주어진 시간에 두 개 이상의 메시지를 게시 할 수있는 웹 채팅 애플리케이션과 같이 빠르게 변화하는 콘텐츠에는 충분하지 않습니다. . ETag / If-None-Match는 이러한 문제를 해결하는 데 도움이 될 수 있습니다.


답변

Google의 모범 사례에 명시된 바와 같이 :

캐시 가능한 모든 리소스에 대해 Expires 또는 Cache-Control max-age 중 하나와 Last-Modified 또는 ETag 중 하나를 지정하는 것이 중요합니다. Expires 및 Cache-Control : max-age를 모두 지정하거나 Last-Modified 및 ETag를 모두 지정하는 것은 중복됩니다.

https://developers.google.com/speed/docs/best-practices/caching


답변

If-Modified-Since 는 날짜를 사용하고 If-None-MatchETag를 사용합니다 . “페이지”(예 : HTML) 및 기타 파일에 모두 사용할 수 있습니다.


답변

서버에서 약하다고 명시하지 않는 한 ETag는 강력한 유효성 검사기로 간주되므로 조건부 범위 요청을 포화시키는 데 사용할 수 있습니다. 그러나 대부분의 자동 생성 ETag는 종종 inode 정보 및 / 또는 고유 한 영구 카운터를 사용하기 때문에 서버 팜 상황에서 어려움을 나타냅니다. 실제로 파일의 쓰기 시간이 합리적으로 좋은 유효성 검사기를 만들기 때문에 Last Modified 헤더가 상당히 정적 인 콘텐츠 (예 : 보호 된 정적 콘텐츠 제공)에 충분하다는 것을 발견했습니다.

ETag는 가장 유연합니다. 준수하는 클라이언트는 조건부 요청으로 ETag를 전송해야하지만 가능한 경우 둘 다 전송해야합니다 (SHOULD).


답변

If-Modified-Since 헤더는 브라우저가 요청 된 리소스를 마지막으로 수신 한 시간을 지정하는 데 사용됩니다. If-None-Match 헤더는 요청 된 자원이 마지막으로 수신되었을 때 서버가 발행 한 엔티티 태그를 지정하는 데 사용됩니다.

설명 된 두 가지 방법에서 이러한 헤더는 브라우저 내에서 콘텐츠 캐싱을 지원하는 데 사용되며, 서버가 리소스의 전체 콘텐츠로 응답하는 대신 리소스의 캐시 된 복사본을 사용하도록 브라우저에 지시 할 수 있습니다. 필요하지 않습니다.