"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
'programing tip' 카테고리의 다른 글
쉘 스크립트에 대한 디자인 패턴 또는 모범 사례 (0) | 2020.06.02 |
---|---|
MongoDB 및 "결합" (0) | 2020.06.01 |
날짜 문자열을 java.util.Date로 구문 분석 할 때 잘못된 패턴 문자 'T' (0) | 2020.06.01 |
Entity Framework를 사용하여 다른 삽입 논리가있는 경우 행 업데이트 (0) | 2020.06.01 |
PHP 사용시 MySQL과 MySQLi 비교 (0) | 2020.06.01 |