HTTP 동작정책

왜 모든 헤더가 아닌 일부 헤더만 캐싱하나요?

Hint

사용자 개인정보가 공유될 수 있기 때문입니다.

캐싱엔진은 공유될 수 있는 정보만 캐싱해야 합니다. 따라서 사용자를 구분하거나 개인정보와 관련된 모든 헤더는 무시합니다.

모든 헤더를 이용해서 꼭 서비스를 해야 합니다.

Hint

instant 또는 bypass 모드를 이용 하세요.

instant 모드는 캐싱엔진을 경유하지만 단 1회만 서비스 되고 사라집니다.

bypass 모드는 캐싱엔진을 우회하여 HTTP 헤더 또는 콘텐츠 편집없이 서비스 됩니다.

See also

바이패스 / 인스턴스 동작 방법 참고

User-Agent 별로 다르게 캐싱할 수 있나요?

Hint

안됩니다. 하지만 hooking 함수 모듈 개발을 통해 커스터마이징 가능합니다.

User-Agent 는 매우 다양하기 때문에 캐싱성능을 극도로 저하시킵니다. 사실상 HIT 되기 어려운 정보라고 보는 것이 맞습니다. 따라서 해당 기능을 표준으로 제공하고 있지는 않습니다.

하지만 많은 경우 User-Agent 를 그룹핑하는 비지니스 로직이 존재하며 해당 규칙을 hooking 함수 모듈에 탑재하면 미션을 달성할 수 있습니다.

쿼리스트링 중 일부만 추출하여 캐싱할 수 있나요?

Hint

안됩니다.

전체 ref-functions-network-cahce-cachingkey-querystring 은 캐싱기능을 표준으로 지원하고 있습니다. 쿼리스트링을 분석하여 캐싱키를 결정하는 과정은 hooking 함수 모듈 개발을 통한 커스터마이징으로 가능합니다.

쿼리스트링 순서가 달라도 같은 파일로 인식하나요?

Hint

아닙니다.

캐싱엔진은 요청 URL 그대로 재정렬하지 않고 인식합니다. 때문에 아래 요청은 서로 다른 것으로 간주됩니다.

?a=1&b=2
?b=2&a=1

Range 요청을 보냈는데 왜 전체를 캐싱하나요?

Hint

캐싱은 Range 가 아닌 URL(=캐싱키) 단위로 동작합니다.

캐싱은 URL(=캐싱키) 단위로 이루어지기 때문에 Range 요청여부와 상관없이 전체를 캐싱합니다. 만약 캐싱되어 있지 않은 파일의 끝부분만 요청할 경우 다음과 같이 동작합니다.

  1. 원본에 GET 요청 [다운로더1]

  2. 원본이 응답한 Content-Length 에 따라 캐싱객체 초기화

  3. 클라이언트 요청을 처리하기 위해 캐싱객체에서 파일 끝부분에 대해 Range 요청. [다운로더2]

  4. 캐싱 파일은 [다운로더1][다운로더2] 가 경쟁하며 조립하는 형태로 완성됩니다.

limitMaxRange 설정을 이용하면 최대 다운로드양을 제한할 수 있습니다.

M2가 원본서버와 HTTP/2로 통신이 가능한가요?

Hint

안됩니다.

브라우저의 HTTP/2 사용목적과 M2의 사용목적은 다릅니다. 캐싱엔진은 캐싱객체별로 세션을 관리하게 되어 있기 때문에 공용세션을 사용하는 HTTP/2 프로토콜과는 맞지 않는 부분이 있어 지원하고 있지 않습니다.

404500 응답도 캐싱하나요?

Hint

네. 캐싱합니다.

정상적인 HTTP 트랜잭션을 통해 원본서버가 응답하였기에 캐싱하는 것이 맞습니다. 다만 응답코드별로 대응전략을 다르게 짤 수 있기에 응답코드별로 TTL (Time To Live) 는 다르게 구성이 가능합니다.

요청 URL 중 샵(#) 이후 요청이 M2 서버에 전송되지 않아요.

Hint

정상 입니다.

“#” 이후 경로는 서버로 전송되지 않습니다. 이것은 브라우저 내에서만 처리됩니다.

파일 32MB 이상 다운로드가 안되요.

Hint

M2로 부터 507 Insufficient Storage 응답을 받았으면, maxUnknowSize 설정 용량을 늘려주시기 바랍니다. 설정 리로드로 설정 가능 합니다. 설정 링크 드립니다.

session에 maxUnknowsize 설정

메모리 모드(기본) 일 경우 Transfer-Encoding: chunked 응답에는 Content-Length 헤더가 없습니다. 사전에 컨텐츠 크기를 알수 없음으로 M2에서 사전에 버퍼를 만들어 둡니다. 다만 M2에서 Transfer-Encoding: chunked 기본 버퍼크기를 32MB로 두고 있습니다. 32MB 이상 요청이 들어오면, M2에서 클라이언트에게 507 Insufficient Storage 응답을 합니다.

DISK 모드 일 경우 DISK를 사용 함으로 maxUnknowSize 영향을 받지 않고, 정상 동작 합니다.

Transfer-Encoding 참고 문서 입니다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding

Note

cache or instant 모드 사용중에 원본 컨텐츠 응답이 Transfer-Encoding: chunked 이고, 32MB 이상일 경우에 발생 합니다. Bypass 모드에는 발생 하지 않습니다.

matchingList.pattern 항목에 $URL[/a.txt] 설정시 querystring 들어간 URL도 적용 됩니다.

Hint

정상 입니다.

querystring까지 인식하는 의도된 동작 입니다. 파일명만 적용하려면 $URLMATCH를 사용 하면 됩니다. 참고) $URLMATCH[...] 지원 리스트