2016-08-18 1 views
1

그래서 내 프로젝트 중 하나에서 서버에 대한 여러 API 호출을 처리하기 위해 http 캐시를 만들어야합니다. 나는 서버로드를 최소화하고 캐싱을 제정하는 조건부 GET과 함께 사용할 수있는이 ETag 헤더에 대해 읽었습니다. 그러나 E-Tag를 생성하는 데 문제가 있습니다. ETag 또는 해시로 리소스의 LAST_UPDATED_TIMESTAMP를 사용할 수 있습니다 MD5 같은 해싱 알 고를 사용합니다. 그러나 이것을하는 가장 좋은 방법은 무엇입니까? 원시 시간 소인을 Etag로 사용하는 데는 단점이 있습니까 ??리소스의 타임 스탬프를 기반으로 ETag를 생성하는 가장 좋은 방법은 무엇입니까

모든지지 대답은 높이 평가됩니다 .. 미리 감사드립니다 .... 건배 !!

답변

1

시간 소인의 자원이 변경 될 때마다 변경되도록 충분한 정밀도가 있으면 시간 소인의 인코딩을 사용할 수 있습니다 (헤더 값은 ascii 여야 함).

그러나 ETag는 많은 것을 저장하지 못할 수도 있음을 기억하십시오. 그것은 단지 캐시 재 검증 헤더 일 뿐이므로 클라이언트로부터 많은 요청을받을 수 있으며 일부는 조건부 일 것입니다. 그러면 ETag가 변경되지 않으면 페이로드를 다시 보내지 않을 수 있지만 여전히 작업이 필요합니다 그걸 알아 내면 (어쩌면 더 적은 일로, 가치가있을 수 있습니다).

사실 IIS의 여러 버전은 파일 타임 스탬프를 사용하여 Etag를 생성했습니다. WinGate의 캐시 모듈을 만들 때 동일한 timestmap을 가진 수많은 파일이 같은 Etag로 끝나고 Etag는 요청 URI의 컨텍스트에서만 유효하다는 것을 알았습니다.

+0

URI의 컨텍스트에서 유효한 Etag를 더 설명 할 수 있습니까? 어떻게 충돌 했어? 각 파일마다 다른 URI를 사용해야하지 않습니까? – otterslide

+0

두 개의 다른 URI는 동일한 ETag 값을 가질 수 있습니다. 분명히 그들은 다른 자원입니다. 따라서 예를 들어 ETag를 입력 할 수 없습니다. 이전 버전의 IIS에서는 ETag를 생성하기 위해 파일 수정 날짜를 사용했기 때문에 많은 파일을 폴더에 복사하고 동일한 날짜를 얻은 경우 동일한 ETag로 끝낼 수있었습니다. IIS에서 방출합니다. – Adrien

+0

네, URI/URL이 브라우저에 의해 고려되지 않았기 때문에 ETags가 도메인의 모든 리소스에 대해 고유해야한다고 말하고 있습니까? – otterslide

관련 문제