I. HTTP 메시지 헤더
HTTP Protocol의 Request와 Reponse에는 반드시 HTTP 메시지 헤더가 포함되어야 한다. 메시지 헤더는 클라이언트나 서너가 Request, Response를 처리하기 위한 정보를 담고 있다.
1.Request의 HTTP 메시지: 메소드, URI, HTTP 버전, HTTP 헤더 등으로 구성.
2.Response의 HTTP 메시지: HTTP 메시지, HTTP 버전, 상태코드, HTTP 헤더 필드로 구성.
II.HTTP 헤더 필드
1.HTTP 헤더 필드의 정의
:HTTP 메시지를 구성하는 요소중 하나로서 Request와 Response에 둘다 사용되는 중요한 정보를 전달하는 역할을 한다. 또한 메시지 바디의 크기나 사용하고 있는 언어, 인증 정보등을 브라우조나 서버에 제공하기 위해 사용한다.
2.HTTP 헤더 필드의 구조
:HTTP 헤더 필드는 헤더 필드 명과 필드 값으로 구성되어있다. ':'로 구분한다.
Content-Type:text/html
위의 경우는 헤더 필드의 예시인데, 'Content-Type'이 헤더 필드고 'text/html'이 헤드 필드 값이다. 하나의 HTTP 헤더 필드는 여러 값을 가질 수 있다.
3.HTTP 헤더 필드의 4가지 종류
: HTTP 헤더 필드는 용도에 따라 4가지 종류로 분류한다.
①General Header Fields
: Request 메시지와 Response 메시지 둘다 사용되는 헤더이다.
②Request Header Fields
: 클라이언트 측에서 서버 측으로 송신된 메시지에 사용되는 헤더로서 Request의 부가적인 정보, 클라이언트 정보, Response의 콘텐츠에 관한 우선 순위를 부과한다.
③Response Header Fields
: 서버 측에서 클라이언트 측으로 송신한 헤더로서 리스폰스의 정보와 서버의 정보, 클라이언트의 추가 정보 요구등을 부가한다.
④Entity Header Fields
:리퀘스트 메시지와 리스폰스 메시지에 포함된 엔티티에 사용하는 헤더로서 콘텐츠 갱신 시간 등 엔티티 관련 정보를 부가한다.
III.HTTP/1.1 일반 헤더 필드
3-1 Chache-Control
: 디렉티브로 불리는 명령을 사용하여 캐싱동작을 지정한다. 파라미터가 있는 것과 없는 것도 있으며 여러개의 디렉티브의 경우 콤마 ","로 구분한다.
①캐시 가능 여부를 나타내는 디렉티브
1) public 디렉티브
Cache-control: public
●다른 유저에게도 돌려줄 수 있는 캐시를 해도 좋다는 것을 명시
2)private 디렉티브
●리스폰스는 특정 유저만들 대상으로 한다. public 디렉티브와 반대되는 기능.
3)no-cache디렉티브
Cache-Control: no-cache
Cache-Control:no-cache=Location
●오래된 리소스가 반횐되는 것을 막기위해 사용한다.
●클라이언트의 리퀘스트로 no-cache 디렉티브가 사용된 경우, 중간 캐시 서버가 오리진 서버까지 리퀘스트를 전송.
●서버의 리스폰스에 no-cache 디렉티브가 사용된 경우, 캐시 서버는 리소스를 저장할 수 없음.
●no-cache의 필드 값에 헤더 필드 명이 지정된 경우 지정된 헤더 필드만 캐시할 수 없음.
②캐시 보존 가능한 것을 제어하는 디렉티브
1) no-store 디렉티브
Cache-Control:no-store
●기밀 정보가 포함된 것을 나타냄.
●캐시를 로컬 스토리지에 보존해서는 안 되도록 지정.
③캐시 기한이나 검증을 지정하는 디렉티브
기한
1) s-maxage 디렉티브
Cache-Control:s-maxage=604800(단위 : 초)
●공유 캐시 서버만 적용.
●Expires 헤더 필드와 max-age 디렉티브 무시.
2)max-age 디렉티브
●캐시 서버가 유효성의 재확인을 하지 않고 리소스를 캐시에 보존해 두는 최대 시간을 나타냄.
3)min-fresh 디렉티브
Cache-Control: min-fresh=60 (단위 : 초)
●캐시된 리소스가 지정된 시간은 최신 상태의 것을 반환하도록 캐시 서버에 요구.
검증
1)max-stale 디렉티브
*stale:신선미가 없는
Cache-Control:max-state=3600(단위 : 초)
●캐시된 리소스의 유효기간이 끝났더라도 받아 들일 수 있음을 나타냄.
2)only-if-cached 디렉티브
Cache-Control:only-if-cached
●캐시 서버에서 리스폰스의 리로드와 유효성을 재확인하지 않도록 요구.
3)must-revalidate 디렉티브
Cache-Control:must-revalidate
●리스폰스의 캐시 유효성 여부를 오리진 서버에 조회를 요구.
4)proxy-revalidate 디렉티브
Cache-Control:proxy-revalidate
●모든 캐시 서버에 대해서 이후의 리퀘스트로 해당 리스폰스를 반환할 때는 반드시 유효성을 재학인 하도록 요구.
5)no-transform 디렉티브
Cache-Control:no-transform
●캐시가 엔티티 바디의 미디어 타입을 변경하지 않도록 지정.
●캐시 서버 등에 의해 이미지가 압축되는 것을 방지.
④Cache-Control 확장
1)cache-extension 토큰
Cache-Control:private, community="UCI"
●cache-extension 토큰을 사용하여 디렉티브 확장 가능.
'CS > HTTP' 카테고리의 다른 글
[HTTP] 8장 누가 액세스하고 있는지를 확인하는 인증 (0) | 2022.09.28 |
---|---|
[HTTP]7장. 웹을 안전 하게하는 HTTPS 정리 (0) | 2022.09.28 |
[HTTP]상태코드 정리 (0) | 2022.09.25 |
[HTTP]간단한 프로토콜 HTTP 정리 (0) | 2022.09.23 |
[HTTP] HTTP, 웹서버, 캐시 (0) | 2022.09.11 |