programing tip

"304 Not Modified"는 어떻게 작동합니까?

itbloger 2020. 6. 1. 19:11
반응형

"304 Not Modified"는 어떻게 작동합니까?


  • "304 Not Modified"는 어떻게 생성됩니까?

  • 브라우저는 http 요청에 대한 응답이 304인지 어떻게 확인합니까?

  • 브라우저에서 설정했거나 서버에서 전송 되었습니까?

  • 서버가 보낸 경우 서버는 캐시에서 사용 가능한 데이터를 어떻게 알 수 있으며 304를 이미지로 어떻게 설정합니까?

브라우저에서 생성 된 경우 내 추측

function is_modified()
{
    return get_data_from_cache() === get_data_from_url();
};

function get_data_from_cache()
{
    return some_hash_or_xxx_function(cache_data);
}

function get_data_from_url()
{
     return some_hash_or_xxx_function(new_data);
}

function some_hash_or_xxx_function(data)
{
  // do something with data
  // what is that algorithm.?
      return result;
}

console.log(is_modified());

데이터를 가져오고 구문 분석하고 DB로 푸시하기 위해 타사 API 공급자에 의존하고 있습니다. 모든 요청 중에 데이터가 변경되거나 변경되지 않을 수 있지만 헤더는 항상 전송 200하고 구문 분석하고 싶지 않습니다 .DB의 마지막 고유 ID 등을 확인하십시오 .. 데이터의 변경을 결정하거나 결과를 직접 비교하지 마십시오. md5(), sha1()& crc32()결과를 해시 & 잘 작동하지만 알고리즘을 결정하는 것이 궁금합니다 304.

동일한 종류의 알고리즘을 사용하여 데이터 변경을 결정하고 싶습니다.


브라우저가 캐시에 무언가를 넣으면 서버 Last-Modified또는 ETag헤더 도 저장 합니다.

그런 다음 브라우저는 If-Modified-Since또는 If-None-Match헤더 와 함께 요청 을 보내 콘텐츠에 여전히 해당 날짜 또는 ETag가 있는지 서버에 304를 보내도록 지시합니다.

서버는 각 자원의 각 버전에 대해 날짜 수정 또는 ETag를 계산하는 방법이 필요합니다. 이것은 일반적으로 파일 시스템 또는 별도의 데이터베이스 열에서 비롯됩니다.


최종 수정 : 요청한 객체의 마지막 수정 날짜

If-Modified-Since : 마지막 수정 날짜가 변경되지 않은 경우 304 Not Modified를 반환 할 수 있습니다.

ETag : ETag는 웹 서버가 URL에서 찾은 특정 버전의 리소스에 할당 된 불투명 한 식별자입니다. 해당 URL의 리소스 표시가 변경되면 새롭고 다른 ETag가 할당됩니다.

If-None-Match : ETag가 변경되지 않은 경우 304 Not Modified를 반환 할 수 있습니다.

날짜 (마지막 수정) 또는 id (ETag)가 포함 된 브라우저 저장소 캐시, URL을 다시 요청해야 할 경우 브라우저는 헤더와 함께 요청 메시지를 보냅니다.

여기에 이미지 설명을 입력하십시오

if 문이 False이면 서버는 304를 반환하고 브라우저는 캐시를 사용합니다.

참고 URL : https://stackoverflow.com/questions/20978189/how-304-not-modified-works

반응형